C 执行过程中耗尽的时间
这是Euler项目的第三个问题。600851475143的最大主要因素是什么。我已经完成了这个程序,但是这个数字是一个12位数的数字,我必须把数据类型的时间延长。当我尝试为小数字(如13195)执行程序时,它可以正常工作,但对于所需的数字则不行!我试着在网上的各种编译器上运行它,也试着在电脑上使用的Cygwin上运行它。但是在三次输出后,程序停止运行 救命C 执行过程中耗尽的时间,c,C,这是Euler项目的第三个问题。600851475143的最大主要因素是什么。我已经完成了这个程序,但是这个数字是一个12位数的数字,我必须把数据类型的时间延长。当我尝试为小数字(如13195)执行程序时,它可以正常工作,但对于所需的数字则不行!我试着在网上的各种编译器上运行它,也试着在电脑上使用的Cygwin上运行它。但是在三次输出后,程序停止运行 救命 #include<stdio.h> int main() { long long num = 600851475143;
#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;
}
#包括
int main()
{
long long num=600851475143;
int i=1,j,k,big=0;
//printf(“\n输入一个数字:”);
//scanf(“%d”和&num);
而(i#包括
int main(){
long long num=600851475143LL;
long long i=1;//当num是素数时,它必须与num的类型相同。
对于(i=2;i*i你能解释一下你的算法吗?这个问题有一个简单的解决方案,但请告诉我们你是如何解决这个问题的。这个问题就是你的算法。你当前的算法是O(N^2),对于如此大的数字,这将花费永远的时间。这个问题可以用一个循环而不是两个嵌套的循环来解决。@StevenBurnap我在这个程序中使用了来自某个地方的逻辑。我想请您提供如何在一个循环中实现它的逻辑。乐趣(和价值)在项目中,euler自己解决这个问题。这个问题可以通过一个循环来解决。作为一个提示,这个问题可以在没有明确测试一个数字是否为素数的情况下完成。
#include<stdio.h>
int main(){
long long num = 600851475143LL;
long long i=1;//It must be the same type for num when was the prime.
for(i=2;i*i<=num;++i){
while(num % i ==0){
num /= i;
}
}
printf("\nBiggest prime factor is %lld", num == 1 ? i - 1 : num);
return 0;
}