We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 11688๋ฒˆ: ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ์ฐพ๊ธฐ - ํŒŒ์ด์ฌ

Redddy 2022. 7. 11. 22:11

๐Ÿ”ˆ ๋ฌธ์ œ

์„ธ ์ •์ˆ˜ a, b, L์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, LCM(a, b, c) = L์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ์ž‘์€ c๋ฅผ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. LCM(a, b, c)๋Š” a, b, c์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์ด๋‹ค.

 

๐Ÿ“์ž…๋ ฅ

์ฒซ์งธ ์ค„์— a, b, L์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ a, b ≤ 106, 1 ≤ L ≤ 1012)

 

๐Ÿ“‘์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— c๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ๊ฐ€๋Šฅํ•œ c๊ฐ€ ์—†์œผ๋ฉด -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“š ๋ฌธ์ œ ํ•ด์„

์ด์ „์— ํ’€์—ˆ๋˜ ์ตœ๋Œ€ ์ตœ๋Œ€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ์ฐพ๊ธฐ ๋ฌธ์ œ์™€ ๋น„์Šทํ•œ ์œ ํ˜•๊ฐ™์•„์„œ ํ’€์–ด๋ณด์•˜๋‹ค.

์ด๋ฒˆ ๋ฌธ์ œ๋Š” a์™€ b ๊ทธ๋ฆฌ๊ณ  L ์ด ์ฃผ์–ด์งˆ ๋•Œ lcm(a,b,c) == L ์„ ๋งŒ์กฑํ•˜๋Š” c์˜ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

 

์ฒ˜์Œ์— ๋ฏธ๋ฆฌ a์™€ b์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•œ ๋‹ค์Œ while ๋ฌธ์„ ๋Œ๋ ค์„œ c์˜ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ์˜ฌ๋ ค L์„ ์ฐพ์•˜๋Š”๋ฐ, TLE ํŒ์ • ๋ฐ›์•˜๋‹ค.

๊ทธ๋ž˜์„œ c += 1 ์ด ์•„๋‹Œ c += lcm(a,b)//10 ์„ ํ•˜์˜€๋Š”๋ฐ๋„ TLE ํŒ์ • ๋ฐ›์•˜๋‹ค.

๋‹ค๋ฅธ ๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ c *= L//lcm(a,b) ์ด ๋งž๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์—ˆ๋‹ค.

 

์—ฌ๋Ÿฌ๋ฒˆ TLE ๋ฐ›๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•˜์˜€๋‹ค.

์•ฝ๊ฐ„์˜ ๊ณ ๋ฏผ ๋์˜ ์ฐพ์€ ๋ฐฉ๋ฒ•์€ ์ด๊ฒƒ์ด๋‹ค.

L์˜ ์•ฝ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ฐพ๊ณ  ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜์—ฌ ํ•˜๋‚˜์”ฉ ๋„ฃ์–ด๋ณด๋Š” ๊ฒƒ์ด๋‹ค. L์˜ ์•ฝ์ˆ˜๋ฅผ ์ฐพ์„ ๋•Œ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋Œ๋ ค๋ฒ„๋ฆฌ๋ฉด ์ด๋•Œ๋„ ์‹œ๊ฐ„์ดˆ๊ณผ ํŒ์ •์„ ๋ฐ›์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ œ๊ณฑ๊ทผ๊นŒ์ง€ ๋Œ๋ ค ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ O(sqrt(n))๋กœ ์„ค๊ณ„ํ•˜์—ฌ ์•ฝ์ˆ˜๋ฅผ ์ฐพ์•˜๋‹ค.

L์˜ ์•ฝ์ˆ˜๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  lcm(ab, c) == L ์ธ ๊ฒƒ์„ ์ฐพ์•˜๋‹ค. (์ด๋•Œ c๋Š” ์•ฝ์ˆ˜๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ)

 

 

 

[๋ฐฑ์ค€] 25432๋ฒˆ: ์ตœ๋Œ€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ - ํŒŒ์ด์ฌ

๐Ÿ”ˆ ๋ฌธ์ œ โ€Š1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ์„œ๋กœ ๋‹ค๋ฅธ 3๊ฐœ์˜ ์ˆ˜๋ฅผ ์„ ํƒํ•ด ๋ณด์ž. ๐Ÿ“์ž…๋ ฅ ์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1≤T≤1000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ T๊ฐœ์˜ ์ค„์—

lazypazy.tistory.com

 

๐Ÿ’ป ์ฝ”๋“œ

import math

a,b,L = map(int,input().split())

def divisor(n): # L์˜ ์•ฝ์ˆ˜๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
    can = []
    for i in range(1, int(math.sqrt(n))+1): # ์ œ๊ณฑ๊ทผ๊นŒ์ง€๋งŒ ๋Œ๋ฆผ
        if n%i==0: # ์•ฝ์ˆ˜๋ผ๋ฉด
            can.append(i)
            can.append(n//i)
    return sorted(can) # ์ •๋ ฌ


if math.lcm(a,b) == L: #a์™€ b์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๊ฐ€ ์ด๋ฏธ L์ด๋ผ๋ฉด c๋Š” 1
    print(1)
elif L%math.lcm(a,b)!=0: # lcm(a,b,c) ==L ์ด ๋ ์ˆ˜ ์—†๋‹ค๋ฉด -1 ์ถœ๋ ฅ
    print(-1)
else:
    ab = math.lcm(a,b)
    for c in divisor(L): # L์˜ ์›์†Œ๋ฆฌ์ŠคํŠธ
        if math.lcm(ab, c)==L: # ๋งŒ์กฑํ•œ๋‹ค๋ฉด
            print(c) # c ์ถœ๋ ฅํ›„ ์ข…๋ฃŒ
            break

 

๐Ÿญ ์‹œํ–‰์ฐฉ์˜ค

๋ฉ”๋ชจ๋ฆฌ ๋Š˜์–ด๋‚˜๊ณ  ์‹œ๊ฐ„ ๋Š˜์–ด๋‚œ ์ฝ”๋“œ๋Š” ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›์†Œ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค€ ์ฝ”๋“œ์ธ๋ฐ, ์˜คํžˆ๋ ค ์—ญํšจ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ์ฐพ๊ธฐ

 

11688๋ฒˆ: ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ์ฐพ๊ธฐ

์„ธ ์ •์ˆ˜ a, b, L์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, LCM(a, b, c) = L์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ์ž‘์€ c๋ฅผ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. LCM(a, b, c)๋Š” a, b, c์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net