处理12位数时c中的性能问题

时间:2017-02-21 11:38:45

标签: c

目前我正在制作一个节目。程序运行良好,但它有性能问题。代码如下。

SET batch = CONCAT('$filename ', NOW())

我无法在这里获得最大素数。 任何人都可以告诉我应该怎么做它需要花费太多时间才能快速获得输出?

1 个答案:

答案 0 :(得分:1)

  1. 如果您正在寻找最大素数,为什么从2开始?从n开始检查并向后工作

  2. calculate可以更快地运行,因为您只需要检查除sqrt(temp)之前的除数,如果它的除数大于该除数,它的除数也小于该值。 / p>

  3. 您的循环增量和减量可以在2的跃点中完成。因此,您还要将要检查的数字范围减半。

  4. 在搜索循环中调用printf检查失败的时间只是浪费执行速度。相反,检查是否成功并突破循环。

  5. 考虑到这些修改(以及从大量UB清除代码):

    #include<stdio.h>
    int calculate(long int temp)
    {
        long int flag = 0,i = 2,tmp = 0;
    
        if (temp % 2 == 0)
            return 1;
    
        for(i = 3; i*i <= temp; i+=2)
        {
            if(temp % i == 0)
            {
                return 1;
            }
        }
        return 0;
    }
    
    int main(void)
    {
        long int j, count = 0, n = 600851475143, i = n, flag = 0, prime = 0;
        long int check;
        while(i > 0)
        {
            if(n % i == 0)
            {
                check = calculate(i);
                if(check)
                {
                    prime = i;
                    break;
                }
            }
            i-=2;
        }
        printf(" Max prime number of %ld is : %ld \n",n,prime);
        return 0;
    }