c++ - 你能告诉我为什么这会产生超过 spoj(质数生成器)的时间限制吗

标签 c++ generator primes

#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;    

bool prime[1000000500];
void generate(long long end)
{
    memset(prime,true,sizeof(prime));
    prime[0]=false;
    prime[1]=false;

        for(long long i=0;i<=sqrt(end);i++)
        {
         if(prime[i]==true)
         {
             for(long long y=i*i;y<=end;y+=i)
             {
                 prime[y]=false;
             }
         }
        }
}

int main()
{
    int n;
    long long b,e;
    scanf("%d",&n);
    while(n--)
    {
        cin>>b>>e;
        generate(e);
        for(int i=b;i<e;i++)
        {
            if(prime[i])
                printf("%d\n",i);
        }
    }
    return 0;
}

这是我的 spoj 素数生成器代码。
Altought 它生成与另一个接受的代码相同的输出..

最佳答案

您不需要筛选每个数字直到最后一个数字。那太傻了。只对开始和结束数字之间的范围进行操作。 (偏筛)

我已经用 Python 解决了这个问题,这就是我最终设法解决的方法。我还开始计算所有素数,直到最大潜在最大值 1000000000 的平方根。这只有 31623,所以不会花很长时间。

从此列表中使用那些数字直到当前案例最大值的平方根来筛选当前案例。

关于c++ - 你能告诉我为什么这会产生超过 spoj(质数生成器)的时间限制吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2070075/

相关文章:

spring-boot - Maven Swagger swagger-codegen-plugin 只生成模型和 Controller

primes - Project Euler 3 - 为什么这种方法有效?

java - Java计算第10001个素数时栈溢出

c++ - OpenCV 视频采集 API

c++ - 虚函数

linux - syslog 日志/事件生成器 linux

javascript - 向生成的线条添加随机颜色

java - Java 中使用 eulers totient 和中国剩余定理的模幂

c++ - 如何为 std::cout 制作可变参数宏?

python - 用opencv提取最大的blob