600851475143这么大的数在C语言中如何表示,设置成doule或者long long int取模运算...
#include <stdio.h>#include <stdbool.h>
//判断一个数是否为合数
bool isCompositeNum(long long int n){
if(n<4){
return false;
}
for(long long inti = 2; i<n/2;i++){
if(n%i == 0){
return true;
}
}
return false;
}
//判断一个数是否是质数
bool isPrimeNum(long long intn){
if(n == 1){
return false;
}
for(long long int i = 2; i<n/2; i++){
if(n%i == 0){
return false;
}
}
return true;
}
int main(int argc,char **argv)
{
long long intnum;
printf("请输入一个合数\n:");
scanf("%lf",&num);
if(!isCompositeNum(num)){
printf("输入有误!\n");
return -1;
}
double tempPrimeNum = 0;
for(long long inti = 2; i < num/2; i++){
if(num %i ==0){
if(isPrimeNum(i)){
tempPrimeNum = i;
}
}
}
printf("合数 %f 最大的质数因子是 :%lf\n",num,tempPrimeNum);
return 0;
}
本帖最后由 wp231957 于 2019-12-31 15:12 编辑
我帮你分解因子了(但不是用c做的)
600851475143=71*839*1471*6857
wp231957 发表于 2019-12-31 15:07
我帮你分解因子了(但不是用c做的)
600851475143=71*839*1471*6857
非常感谢您的解答!请教您一下这个分解因子的思路是怎样的了? guoquanli 发表于 2019-12-31 17:46
非常感谢您的解答!请教您一下这个分解因子的思路是怎样的了?
呵呵,没啥思路,python比这再大的数也是支持的,所以简单枚举就可以 guoquanli 发表于 2019-12-31 17:46
非常感谢您的解答!请教您一下这个分解因子的思路是怎样的了?
c里想玩这个费点劲,c++里面貌似有个大数库
但是c里面貌似没有
除非自己写一个字符串加减乘除法??? 本帖最后由 Croper 于 2019-12-31 22:07 编辑
600851475143在long long int的范围内啊,直接用long long不就行了么。。?
你的问题在于:
第一:
long long intnum;
printf("请输入一个合数\n:");
scanf("%lf",&num);
long long的格式化字符串是%lld,不是%lf。
第二:
for(long long inti = 2; i < num/2; i++){
if(num %i ==0){
if(isPrimeNum(i)){
tempPrimeNum = i;
}
}
}
这一段的时间复杂度已经到了O的水平,
换句化说,你可以自己估计一下大概要循环多少次,你的电脑要花多少时间来算这一段
Croper 发表于 2019-12-31 21:28
600851475143在long long int的范围内啊,直接用long long不就行了么。。?
你的问题在于:
还可以优化的,用不了那么多次循环 wp231957 发表于 2019-12-31 22:34
还可以优化的,用不了那么多次循环
当然可以优化。。我是引用的楼主的代码。。
页:
[1]