Programming Ability Test学习 1013. 数素数 (20)
1013. 数素数 (20)
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。
输入格式:
输入在一行中给出M和N,其间以空格分隔。
输出格式:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
输入样例:5 27输出样例:
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103
解题思路:申请一个很大的数组,如果数组下标是素数,则数组为1,否则为0。要注意的是申请多大的数组,第一万个素数是104729,则申请a[105000];
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<string> #include<algorithm> #define MAXSIZE 105000 using namespace std; //判断是不是素数 bool JudgePrime(int N); int main() { int a[MAXSIZE]; a[0]=0; a[1]=0; for(int i=2;i<MAXSIZE;i++) { if(JudgePrime(i)==true)a[i]=1; else a[i]=0; } int N1,N2; cin>>N1>>N2; int j,k;j=k=0; for(int i=0;i<MAXSIZE;i++) { if(a[i]==1) { j++;//用来记录第几个素数 if(j>=N1&&j<=N2){ k++;//用来记录第N1个素数和第N2的素数之间的素数个数 cout<<i; if(k%10==0)cout<<endl; else //考虑最后一行不足10个元素但仍需要换行 { if(k==N2-N1+1)cout<<endl; else cout<<" "; } } } } return 0; } bool JudgePrime(int N) { int j; for(j=2;j<=sqrt(N);j++) { if(N%j==0){ return false; break; } } if(j>sqrt(N)) return true; }