The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143?
-
어떠한 숫자의 소수의 약수를 구하는 문제이다.
-
우선 우리가 알아야 할것은 어떠한 수의 약수는 전부 소수로 표현할수있다! 예를 들어서 18의 경우 $2\times9$이지만 9의 경우 $3\times 3$의 소수 두개로 표현이 가능하다.
-
따라서 숫자 n의 약수를 구하면서 나누는 숫자를 소수로 만들면 된다!
(말은 쉽다!)def euler003a(number=600851475143): def getFactor(num): result = {} # 결과 값을 저장할 dict n = 2 while(num >= n): while(True): if(num % n == 0): # 약수조건에 맞는다. if (n in result): result[n] += 1 else: result[n] = 1 num //= n # 지금의 숫자로 나눌수 있는 만큼 계속 나눈다. else: # 약수가 아닐시 바로 탈주 break n += 1 # 나누는 숫자 +1 return (result) result = getFactor(number)
-
결국엔 2에서 부터 숫자를 나눠 나가는데 2를 한번만 나누고 3으로 넘어가는게 아니고 2로 나눌수 있는 만큼 최대로 돌리고 그 다음 숫자로 넘어가는 것이 포인트이다.