-3
这是欧拉项目的第三个问题。什么是600851475143.最大的主要因素是什么。我已经完成了这个程序,但是这个数字是一个12位数字,我不得不把这个数据类型用很长的时间。当我尝试执行小号码的程序(如13195)时,它可以正常工作,但对于所需的号码它不会!我试着在各种编译器上在线运行它,并在我的PC上使用Cygwin。但是这些程序在三次输出后停止前进。时间在执行期间耗尽
帮助!
#include<stdio.h>
int main()
{
long long num = 600851475143;
int i=1,j,k, big=0;
// printf("\nEnter a number:");
//scanf("%d",&num);
while(i<=num)
{
k=0;
if(num%i==0)
{
j = 1;
while(j <= i)
{
if(i % j == 0)
k++;
j++;
}
if(k==2)
{
printf("\n%d is a prime factor",i);
if(i > big)
big = i;
}
}
i++;
}
printf("\nBiggest prime factor is %d", big);
return 0;
}
你能解释一下你的算法?这个问题有一个简单的解决方案,但让我们知道你是如何处理这个问题的。 – rendon
问题是你的算法。你目前的算法是O(N^2),这对于大数量将永远占用的数量而言。这个问题可以用一个循环来解决,而不是两个嵌套的问题。 –
@StevenBurnap我在这个编程中使用了逻辑从somehwere ..我想要求您提供您的逻辑如何在一个循环中做到这一点.. – LearneR