令P
i表示第i个素数。现任给两个正整数M <= N <= 10
4,请输出P
M到P
N的所有素数。
--------------------------分割线--------------------------
输入格式:
输入在一行中给出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
https://www.patest.cn/contests/pat-b-practise/1013
#include<stdio.h>
int s[2000];
int i,j,m,n,k,p;
int flag=1;
int endl=0;
int main(){
scanf("%d%d",&m,&n);
k=1;
p=0;
s[0]=2;
for(i=3;k<=n;i++){
if(k<n&&k>=m&&flag==1&&endl!=9){
printf("%d ",s[p]);
endl++;
}else if(k<n&&k>=m&&flag==1&&endl==9){
printf("%d\n",s[p]);
endl=0;
}else if(k==n&&k>=m&&flag==1){
printf("%d\n",s[p]);
}
flag=1;
for(j=0;j<p;j++){
if(i%s[j]==0){
flag=0;
}
}
if(flag==1){
k++;
p++;
s[p]=i;
}
}
}
上述代码在测试点4运行超时。
--------------------------分割线--------------------------
#include<stdio.h>
int s[2000];
int i,j,m,n,p;
int flag=1;
int endl=0;
int main(){
scanf("%d%d",&m,&n);
p=0;
s[0]=2;
for(i=3;p<n;i++){
flag=1;
for(j=0;j<p;j++){
if(i%s[j]==0){
flag=0;
}
}
if(flag==1){
p++;
s[p]=i;
}
}
for(i=m-1;i<n;i++){
printf("%d",s[i]);
endl++;
if(endl!=10&&i!=n-1){
printf(" ");
}else{
printf("\n");
endl=0;
}
}
}
把第1-n个素数全部列出来以后按照要求输出,测试点4仍旧运行超时。
--------------------------分割线--------------------------
#include<stdio.h>
int i,m,n;
int count=0;
int flag=0;
int isprime(int n){
for(int k=2;k*k<=n;k++){
if(n%k==0){
return 0;
}
}
return 1;
}
int main(){
scanf("%d%d",&m,&n);
for(i=2;count<=n;i++){
if(isprime(i)){
count++;
if(count>=m&&count<=n){
printf("%d",i);
flag++;
if(flag==10){
flag=0;
printf("\n");
}else if(count!=n){
printf(" ");
}
}
}
}
}
更新了判断素数的算法以后,测试通过。