guoquanli 发表于 2019-12-31 14:40:14

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:07:15

本帖最后由 wp231957 于 2019-12-31 15:12 编辑

我帮你分解因子了(但不是用c做的)

600851475143=71*839*1471*6857

guoquanli 发表于 2019-12-31 17:46:58

wp231957 发表于 2019-12-31 15:07
我帮你分解因子了(但不是用c做的)

600851475143=71*839*1471*6857

非常感谢您的解答!请教您一下这个分解因子的思路是怎样的了?

wp231957 发表于 2019-12-31 17:48:59

guoquanli 发表于 2019-12-31 17:46
非常感谢您的解答!请教您一下这个分解因子的思路是怎样的了?

呵呵,没啥思路,python比这再大的数也是支持的,所以简单枚举就可以

wp231957 发表于 2019-12-31 17:56:01

guoquanli 发表于 2019-12-31 17:46
非常感谢您的解答!请教您一下这个分解因子的思路是怎样的了?

c里想玩这个费点劲,c++里面貌似有个大数库
但是c里面貌似没有
除非自己写一个字符串加减乘除法???

Croper 发表于 2019-12-31 21:28:11

本帖最后由 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的水平,
换句化说,你可以自己估计一下大概要循环多少次,你的电脑要花多少时间来算这一段

wp231957 发表于 2019-12-31 22:34:34

Croper 发表于 2019-12-31 21:28
600851475143在long long int的范围内啊,直接用long long不就行了么。。?

你的问题在于:


还可以优化的,用不了那么多次循环

Croper 发表于 2019-12-31 22:55:04

wp231957 发表于 2019-12-31 22:34
还可以优化的,用不了那么多次循环

当然可以优化。。我是引用的楼主的代码。。
页: [1]
查看完整版本: 600851475143这么大的数在C语言中如何表示,设置成doule或者long long int取模运算...