如何在 C 中找到 600851475143 的最大质因数?[复制]

How to find the largest prime factor of 600851475143 in C? [duplicate]

提问人:SKCPA- 提问时间:5/29/2015 最后编辑:KartikeySKCPA- 更新时间:9/19/2021 访问量:2060

问:

我尝试使用如下所示的代码找到最大的质因数。
但是,此代码不会返回任何输出,甚至不会返回错误或警告。
600851475143

我哪里出错了?

法典:

#include <stdio.h>

int main()
{
  int i, j, k, mpf;

  for (i = 1; i < 600851475143; i++)
  {
    if (600851475143 % i == 0)
    {
      k = 0;
      for (j = 1; j <= i; j++)
        if (i % j == 0)
          k++;

      if (k == 2)
        mpf = i;
    }
  }

  printf("\nThe largest prime factor of 600851475143 is: %ld\n", mpf);
  return 0;
}
C 项目

评论

7赞 BLUEPIXY 5/29/2015
stackoverflow.com/questions/19360281/......或尝试在此站点中搜索。[c] 600851475143
0赞 Weather Vane 5/29/2015
你的程序甚至不会打印任何东西,直到它完成 - 几乎是永远的。而且由于您没有初始化,因此它可以打印垃圾。mpf
2赞 200_success 5/29/2015
与其抱怨被要求写一些文字,为什么不花点精力写一个好问题呢?例如,告诉我们什么是“欧拉概率 3 项目”?
0赞 Fred Larson 5/29/2015
我得到:.当我跑步时,过了一会儿我会得到.example.c:25:5: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘int’Floating point exception (core dumped)
0赞 chux - Reinstate Monica 5/29/2015
@Fred Larson 由于 32 位总是小于 ,因此它最终会变成 。 导致“浮点异常”,即使它是一个整数数学。i600851475143iINT_MAX0600851475143%0

答:

0赞 200_success 5/29/2015 #1

循环多达 6000 亿个将需要很长时间——不仅需要很长时间,而且是不可能的,因为它超出了 a 中可以存储的内容(现在通常高达 2^31-1,但根据 C 标准可能小到 2^15-1)。int

您需要的是一种更智能的算法。我建议你不要逐字逐句地给你解决方案,而是看看现有的答案,然后自己用 C 语言制定一个解决方案。

0赞 aakansha 5/29/2015 #2

不应从 1 循环到 600851475143,而应从 2 循环到 600851475143 的平方根:

long long num=600851475143;
long i=2;   
while(i<=sqrt(num))
{   
    //printf("%lu\n",num);
    if(num%i==0)
    {
        while(num%i==0)
        {
            num/=i;
        }           
        if(num==1)
        {
            num=i;
            break;
        }
    }
        else
        {
            i++;
        }
}
printf("%lu",num);