超出spoj.com主发电机时间限制

超出spoj.com主发电机时间限制,c,C,提交答案时超出了时间限制。我在spoj.com上提交了2-3个问题,我也面临同样的问题 彼得想为他的密码系统生成一些素数。救救他!您的任务是生成两个给定数字之间的所有素数 输入 输入以单行中测试用例的数量t开始(t您的算法是O((m-n)*n),当然不会在分配的时间限制内运行。让我们看一下您的代码: count=0; for(k=1;k<=j/2;k++) { if(j%k==0) count++; if(count>1) break; } if(count==1) printf(

提交答案时超出了时间限制。我在spoj.com上提交了2-3个问题,我也面临同样的问题

彼得想为他的密码系统生成一些素数。救救他!您的任务是生成两个给定数字之间的所有素数

输入

输入以单行中测试用例的数量t开始(t您的算法是O((m-n)*n),当然不会在分配的时间限制内运行。让我们看一下您的代码:

count=0;
for(k=1;k<=j/2;k++)
{
if(j%k==0)
count++;
if(count>1)
break;
}
if(count==1)
printf("%lld\n",j);
现在这是O((m-n)*sqrt(n)),它要快得多

我想这不会造成限制。你可以扩展第二个微优化,很容易跳过可被3整除的数字


优化:如果这还不够,那么你必须做一个伪素性测试。一个很容易在O(log(n))中实现的测试是。通过这个测试,复杂性下降到O((m-n)*log(n))应该在可用的时间限制内运行。

您是否考虑过使用Eratosthenes筛并将其与二进制搜索相结合?或者硬编码素数?暴力是行不通的。您可能希望谷歌搜索Eratosthenes筛。为了可读性/可理解性,请一致地缩进代码。建议在每次操作后使用4个空格使用大括号“{”并在每个右大括号“}”之前取消缩进。
2
3
5
7

3
5
#include <stdio.h>

int main()
{
    int t,i,k,count;
    long long int j=0,m=0,n=0;

    scanf("%d",&t);

    for(i=1;i<=t;i++)
    {
        scanf("%lld%lld",&m,&n);

        for(j=m;j<=n;j++)
        {
            count=0;
            for(k=1;k<=j/2;k++)
            {
                if(j%k==0)
                    count++;
                if(count>1)
                    break;
            }

            if(count==1)
                printf("%lld\n",j);
        }
        printf("\n");
    }

    return 0;
}
count=0;
for(k=1;k<=j/2;k++)
{
if(j%k==0)
count++;
if(count>1)
break;
}
if(count==1)
printf("%lld\n",j);
bool prime = j==2 || j%2==1 ;
for(k=2;prime && k*k<=j;k++)
{
if(j%k==0) prime = false;
}
}
if(prime) printf("%lld\n",j);