令 Pi表示第 i 个素数。现任给两个正整数 M≤N≤10^4,请输出 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
//速度超慢,而且总是扣一分。。改不出来。。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a[100000];
int m,n;
cin>>m>>n;
int j=2;
a[1]=2;
for (int i=2;i<=100000;i++)
{
int flag=0;
for (int k=1;k<sqrt(i)+1;k++)
{
if (i%k==0) {flag++;}
}
if (flag==1) {a[j]=i;j++;}
}
for (int i=m;i<n;i++)
{
if ((i-m+1)%10==0) cout<<a[i]<<endl;
else cout<<a[i]<<" ";
}
if ((n-m+1)%10==0) cout<<a[n]<<endl;
else cout<<a[n];
return 0;
}
//法2 已过
#include <iostream>
#include <cmath>
using namespace std;
bool isprime(int n)
{
if (n==2||n==3) return true;
else
{
for (int i=2;i<=sqrt(n);i++)
if (n%i==0) {return false;break;}
return true;
}
}
int main()
{
int m,n;
cin>>m>>n;
int t=2,k=1;
while (true)
{
if (isprime(t))
{
if (k<m) {k++;t++;}
else if (k==n) {cout<<t;break;}
else if (k>m||k<n)
{
if ((k-m+1)%10==0) {cout<<t<<endl;t++;k++;}
else {cout<<t<<" ";t++;k++;}
}
}
else t++;
}
return 0;
}