- 이 문제의 위에 나와있는 소스코드의 의미를 해석하는 부분에서 많은 시간이 걸렸다. 소스코드를 보면서 어떤 것을 구해야하는지 알아냈고 이 문제의 의미는 다음과 같다.
"N의 약수(단, N은 제외) 중에서 가장 큰 약수를 구하려면 몇 번 감소시켜야 하는가?"
- N의 값의 범위는 1 ≤ N ≤ 10^9으로 1씩 감소시켜서 나간다면 당연히 시간초과가 발생할 것이다.
- N의 약수를 구할 때는 1부터 N의 제곱근까지의 수만 0으로 나누어 떨어지는지 확인하면 된다. 다음 예시를 통해서 이해해보자.
ex. 100의 약수를 구하는 과정
100 % 1 = 0
100 % 2 = 0
100 % 3 = 1
100 % 4 = 0
100 % 5 = 0
100 % 6 = 4
100 % 7 = 2
100 % 8 = 4
100 % 9 = 1
100 % 10 = 0
100 / 1 = 100
100 / 2 = 50
100 / 4 = 25
100 / 5 = 20
100 / 10 = 10
import sys
input = sys.stdin.readline
N = int(input())
i = 2
Counter = 1
while i * i <= N:
if N % i == 0:
Counter = N // i
break
i += 1
print(N-Counter)