题目
PAT
令 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
思考
先做出一个10000个素数的数组,会方便很多
代码
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int n,m;
cin>>n;
cin>>m;
int a[105000],b[10000];
int i,j,k,g;
k=0;
g=0;
j=0;
for(i=0;i<=104729;i++)//第10000给素数是104729,所以a[n]长度为104729
{
a[k]=i;
k++;
}
i=0;
while(i<k)//找出a中的素数放入b中
int x=a[i];
double y=sqrt(x);//用开根号减少计算量提高速度
int m=2;
int flag=1;
while(flag==1 && m<=y)
{
if(x%m==0)
{
flag=0;
}
else
{
m++;
}
}
if(flag==1)
{
b[g]=x;
g++;
}
i++;
}
k=n;
while(k<=m-1)
{
if(j<9)
{
cout<<b[k+1]<<" ";
k++;
j++;
}
else//第十个换行,后面不加空格
{
cout<<b[k+1]<<endl;
k++;
j=0;
}
}
cout<<b[k+1];//最后一个没有空格,单独输出
//system("pause");
}
注释
不要被第几个素数所迷惑,最简单的方式是从素数数组中进行选择输出。