【发布时间】:2014-07-20 04:43:24
【问题描述】:
我知道以前有人问过这个问题,但我不能完全理解如何实现 Eratosthenes 的分段筛。
问题
输入以单行中的测试用例数量 t (t
我的方法
我可以实现埃拉托色尼筛法,我可以找到最大为 n 的平方根的素数。 但我无法理解如何实施其他网站上正在讨论的“偏移”。如何在选定的分区上执行 Sieve?
#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
long long m,n;
long long p[100001];
bool primes[100000];
cin>>m;
cin>>n;
long long square=sqrt(n);
cout<<square;
int j=0;
int i;
primes[0]=false;
primes[1]=false;
for(i=2; i<n;i++)
primes[i]=true;
for(i=2; i<=square; i++)
{
if(primes[i]==true)
{
for(j=i+i; j<=n; j+=i)
primes[j]=false;
}
}
for(i=m; i<n ; i++)
{
if(primes[i]==true)
{
cout<<i<<" \t";
if(i >= m)
{
p[j]=i;
j++;
}
}
}
for(i=0 ; i<j ; i++)
{
cout<<p[i]<<"\n";
}
}
return 0;
}
【问题讨论】:
-
从不同于 1 的数字开始?还要学会正确地格式化你的代码。
-
看我的回答here。
标签: c++ primes sieve-of-eratosthenes