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 |