|
发表于 2022-11-5 08:22:27
|
显示全部楼层
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- long long i, j, k, l, num = 600851475143;
- _Bool flag = 1;
- for (i = 2, j = num/i; flag != 0; i++, j = num/i, flag = 1)
- {
- if (i * j == num)//先找到相对最小因子i和相对最大因子j,它们是一一对应的,
- {
- k = sqrt((double)j);//因为一一对应,所以相对最小因子和相对最大因子最终值是这个数的平方根
- for (l = 2; l <= k; l++)//判断最大因子是否为质数,能被l整除就不是合数,不是质数,继续取值循环
- {
- if (j % l == 0)
- {
- flag = 0;
- break;
- }
- }
- if (flag)
- {
- break;
- }
- }
- }
- printf("%lld\n", i);
- return 0;
- }
复制代码- int main()
- {
- unsigned long long num=600851475143,tmp=num,i,j;
- j=(unsigned long long)sqrt((double)tmp);
- for (i=2;i<=j;i+=1)
- {
- if(0==tmp%i)
- {
- tmp=tmp/i;
- i=1;
- j=(unsigned long long)sqrt((double)tmp);
- }
- }
- printf("%llu",tmp);
- return 0;
- }
复制代码 |
|