第三题
Largest prime factor
我的做法,从后面开始找是不是因数,然后判断是不是素数
bool prime(long long n)
{
long long i;
for(i = 2; i <= sqrt(n); i++)
{
if(n % i == 0)
return 0;
else
continue;
}
return 1;
}
int example3()
{
long long n = 600851475143;
//scanf("%d", &n);
long long k = sqrt(n);
long long i;
long long a[100000];
long long num = 0;
for( i = k; i >= 100; i--)
{
if(n % i == 0)
{
if(prime(i))
{
printf("%lld\n", i);
break;
}
}
else
continue;
}
}
胡船长的做法,用NUM /= i 把自己除到最后使NUM 和 I 为互质的数,并且保存质数I
void example3q() // 这个NUM 除了若干次后,
{
int64_t num = 600851475143LL;
int64_t max = 0;
int64_t i;
for(i = 2; i * i <= num; i++)
{
if(num % i == 0)
{
while(num % i == 0)
{
num /= i;
}
max = i;
}
if(num != 1)
max = num;
}
}