PAT乙级1013 数素数 (20 分)
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级1013 数素数 (20 分)相关的知识,希望对你有一定的参考价值。
https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112
朴素写法
#include<cstdio>
bool a[1000005]={false};
int b[10005];
int main(void)
{
int m,n;
int i,j;
for(i=2;i<=1000005;i++)
{
if(a[i]==false)
for(j=i+i;j<=1000005;j=j+i)
{
a[j]=true;
}
}
j=0;
for(i=2;i<=1000005;i++)
{
if(a[i]==false)
{
b[j++]=i;
}
}
while( scanf("%d%d",&m,&n) != EOF )
{
int count=0;
for(i=m-1;i<=n-1;i++)
{
printf("%d",b[i]);
count++;
if(count<10&&i!=n-1)
{
printf(" ");
}
if(count==10)
{
printf("\\n");
count=0;
}
}
if(count!=0)
printf("\\n");
}
return 0;
}
线性筛写法
#include<cstdio>
#include<iostream>
using namespace std;
int primes[20005],cnt;
bool st[200005];
void print()
{
for(int i=2;i<=200000;i++)
{
if(!st[i]) primes[cnt++]=i;
for(int j=0;primes[j]<=200000/i;j++)
{
st[primes[j]*i]=true;
if(i%primes[j]==0) break;
}
}
}
int main(void)
{
int a,b; cin>>a>>b;
print();
int count=1;
for(int i=a-1;i<b;i++)
{
cout<<primes[i];
if(count<10&& (i!=b-1)) cout<<" ";
if(count%10==0) cout<<endl,count=0;
count++;
}
return 0;
}
以上是关于PAT乙级1013 数素数 (20 分)的主要内容,如果未能解决你的问题,请参考以下文章