PAT乙级(Basic Level)真题 数素数(素数筛法)

来源:互联网 发布:规律转移矩阵 编辑:程序博客网 时间:2024/06/01 07:59

题目描述

令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。

输入描述:

输入在一行中给出M和N,其间以空格分隔。


输出描述:

输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。

输入例子:

5 27

输出例子:

11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 8997 101 103

分析:素数筛法打表

AC代码:

#include<cstdio>#include<cstring>#include<cmath>using namespace std;const int maxn=1e6;int a[maxn];int vis[maxn];void table(){memset(vis,0,sizeof(vis));for(int i=2;i<=sqrt(maxn);i++){if(!vis[i]){for(int j=i*i;j<maxn;j+=i)vis[j]=1;}}int j=1;for(int i=2;i<maxn;i++) if(!vis[i])  a[j++]=i;}int main(){int m,n;table();while(scanf("%d%d",&m,&n)==2){int cnt=0;for(int i=m;i<=n;i++){if(cnt%10==0){if(cnt==0)printf("%d",a[i]);else printf("\n%d",a[i]);    }    else printf(" %d",a[i]);    cnt++;    }} return 0;}



0 0
原创粉丝点击