코딩

[BOJ] 백준 23848 등비수열의 합 python

척척석사아님 2024. 3. 31. 22:00
728x90

 

 

문제는 이런 느낌

import math
N = int(input())
jud = False
t = int(math.log2(N+1)) #t개까지 할 수 있을듯?
for k in range (3, t+1): #k는 항의 갯수
    r = 2
    while r ** (k-1) <= N: 
        if N * (r - 1) % (r ** k - 1) == 0:
            a = N * (r - 1) // (r ** k - 1)
            ans = [a * (r**l) for l in range (0,k)]
            jud = True
            break
        else:
            r += 1
if jud == False:
    print(-1)
else:
    print(len(ans))
    print(*ans)

 

부등식을 통해서 수를 얼마나 잘 컨트롤 할 수 있을지 체크하는 것이 중요하겠다.

 

처음 공비의 상한을 () ** (1/k) 꼴로 만들어서 했었는데, 이러면 10000이상에서 문제가 해결이 되지 않는 경우가 생겼었다.

 

이를 해결하게 위해 while을 통해서 그 범위를 컨트롤 하는 것으로 변경하였더니 바로 문제가 풀렸다 :)

'코딩' 카테고리의 다른 글

[BOJ] 16236 아기상어 python  (0) 2024.04.09
[BOJ, 백준] 14499 주사위 굴리기 Python  (1) 2024.04.08
[BOJ] 9359 서로소 python  (1) 2024.03.31
[BOJ] 3964 팩토리얼과 거듭제곱 Python  (0) 2024.03.18
[BOJ] 1149 RGB 거리 python  (0) 2024.03.12