阿亮不减肥 发表于 2022-9-7 01:19:22

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;
}

jackz007 发表于 2022-9-7 13:19:42

      答案是多少?
      6857 是正确答案

阿亮不减肥 发表于 2022-9-7 14:03:45

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;
}

jackz007 发表于 2022-9-7 16:09:04

         这个代码的答案是 87625999,可是,87625999 = 1234169 x 71 ,所以,它并非一个素数!

阿亮不减肥 发表于 2022-9-7 16:48:40

jackz007 发表于 2022-9-7 16:09
这个代码的答案是 87625999,可是,87625999 = 1234169 x 71 ,所以,它并非一个素数!

主要是自己写的,没有自信是对,只能保证程序运行是没问题的;至于结果不知道对不对;{:9_227:}

jackz007 发表于 2022-9-7 17:41:08

本帖最后由 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]
查看完整版本: 600851475143的最大质因数为6857