Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 执行过程中耗尽的时间_C - Fatal编程技术网

C 执行过程中耗尽的时间

C 执行过程中耗尽的时间,c,C,这是Euler项目的第三个问题。600851475143的最大主要因素是什么。我已经完成了这个程序,但是这个数字是一个12位数的数字,我必须把数据类型的时间延长。当我尝试为小数字(如13195)执行程序时,它可以正常工作,但对于所需的数字则不行!我试着在网上的各种编译器上运行它,也试着在电脑上使用的Cygwin上运行它。但是在三次输出后,程序停止运行 救命 #include<stdio.h> int main() { long long num = 600851475143;

这是Euler项目的第三个问题。600851475143的最大主要因素是什么。我已经完成了这个程序,但是这个数字是一个12位数的数字,我必须把数据类型的时间延长。当我尝试为小数字(如13195)执行程序时,它可以正常工作,但对于所需的数字则不行!我试着在网上的各种编译器上运行它,也试着在电脑上使用的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;
}
#包括
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;
}