600851475143的最大质因数为6857
#include <stdio.h> //算出结果最大为6857,和答案不符合,不知道哪里有错误int main() {
// inti, j;
long long int x, i, j;
x = 600851475143 ;
for (i = 2;; i++) {
while (x % i == 0) {
x = x / i;
}
if (x < i) {
break;
}
}
printf("600851475143的最大质因数为%lld\n", i);
return 0;
} 答案是多少?
6857 是正确答案 jackz007 发表于 2022-9-7 13:19
答案是多少?
6857 是正确答案
//87625999下面为小甲鱼代码
#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) {
k = sqrt((double)j);
for (l = 2; l <= k; l++) {
if (j % l == 0) {
flag = 0;
break;
}
}
if (flag) {
break;
}
}
}
printf("%lld\n", i);
return 0;
} 这个代码的答案是 87625999,可是,87625999 = 1234169 x 71 ,所以,它并非一个素数! jackz007 发表于 2022-9-7 16:09
这个代码的答案是 87625999,可是,87625999 = 1234169 x 71 ,所以,它并非一个素数!
主要是自己写的,没有自信是对,只能保证程序运行是没问题的;至于结果不知道对不对;{:9_227:} 本帖最后由 jackz007 于 2022-9-7 18:30 编辑
阿亮不减肥 发表于 2022-9-7 16:48
主要是自己写的,没有自信是对,只能保证程序运行是没问题的;至于结果不知道对不对;
我们可以为 600851475143 分解质因数:
#include <stdio.h>
int main(void)
{
int c ;
long long d , k , n ;
printf("请输入一个正整数 : ") ;
scanf("%I64d" , & n) ;
printf("%I64d = " , n) ;
for(c = 0 , d = n , k = 2 ; k * k < d + 1 ;) {
if(! (d % k)) {
if(c) printf(" x ") ;
printf("%I64d" , k) ;
d = d / k ;
c ++ ;
} else k ++ ;
}
if(c) printf(" x ") ;
printf("%I64d\n" , d) ;
}
编译、运行实况:
D:\\C>g++ -o x x.c
D:\\C>x
请输入一个正整数 : 600851475143
600851475143 = 71 x 839 x 1471 x 6857
D:\\C>
结果表明,600851475143 一共有 4 个质数因子,其中,6857 最大,你自己完全可以通过计算器来进行验证。
下面,再来看看所谓的答案 87625999
D:\\C>x
请输入一个正整数 : 87625999
87625999 = 71 x 839 x 1471
D:\\C>
可见,87625999 有 3 个质数因子存在,可见,它的确不是一个质数!
页:
[1]