#include <iostream>
using namespace std;
int main()
{
__int64 number = 600851475143;
int divisor = 2;
while (number > 1) {
if (0 == (number % divisor)) {
number /= divisor;
divisor--;//这一步是关键,保证divisor只能是素数
}
divisor++;
}
cout<<divisor<<endl;
}
核心思想是将大数变得越来越小。
def find_prime_factors(n):
remaining = n
primefactors = []
while remaining <> 1:
if primefactors == []:
i=1
else:
i=primefactors[len(primefactors)-1]-1
while i < remaining:
i+=1
if remaining%i == 0:
remaining = remaining/i
primefactors.append(i)
break
return primefactors
print find_prime_factors(600851475143)