|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
求出num的最大质数因子。
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- long long i, j, k, num = 600851475143;
- _Bool flag1 = 1;//判断质数
- _Bool flag2 = 0;//判断约数
-
- for (i = num; i > 2; i--)
- {
- if (num % i == 0)
- {
- flag2 = 1;
- k = sqrt((double)i);
- for (j = 2; j <= k; j++)
- {
- if (i % j == 0)
- {
- flag1 = 0;
- break;
- }
- }
- if (flag1 == 1 && flag2 == 1)
- {
- break;
- }
- else
- {
- flag2 = 0;
- flag1 = 1;
- }
- }
- }
- printf("最大质数因子为%lld\n", i);
- return 0;
- }
复制代码
运行没有结果
哪位大神帮忙看看错误在哪,并给出修改建议。
思路没问题
应该是超时吧
你那个不用从600851475143判断
假设一下 如果有一个数10000 那么这个数的最大质因子要么它本身 要么小于等于他的根号也就是100 这个你要想一下为什么比较好
题目说了 它是合数 所以不用判断它是否是质数
所以我判断1000000内的数就可以了
那个欧拉计划我也有做过这道题
#include<stdio.h>
int a[1000001];
int main(){
int i,j;
for(i = 2; i <= 500000;i++){
for(j = i * 2;j <=1000000;j += i)
a[j] = 1;
}
for(i = 999999;i >= 2; i-- )
if(a[i] == 0 && 600851475143%i == 0){
printf("%d",i);
return 0;
}
printf("600851475143");
return 0;
}
我是先筛选素数在判断是不是因子
筛选素数的思路很简单 素数的倍数不是素数 用数组辅助 求得一定范围内的素数然后判断
|
|