令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
#include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#define IMAX 1000010//IMAX 得设置这么大,设6位数,后台有一个测试数据无法覆盖int PRime[IMAX]={0};bool isPrime(int n){ if(n<=1)return false; int sqr=(int)sqrt(1.0*n); for(int i=2;i<=sqr;++i){ if(n%i == 0)return false; } return true;}void find_Prime(int n)//n是用来记录需要的素数个数,到了就停止,没必要全算,如果不设n,因为IMAX设置的很多,会导致运行超时{ int num=0;//用来记录素数个数的底坐标 for(int i=2;i<IMAX;i++){ if(isPrime(i)){ prime[num++]=i; if(num>n)break; } }}int main(){ int pm=0,pn=0; scanf("%d%d",&pm,&pn); int count=0;//用于每10个数输出一行 find_Prime(pn); for(int j=pm-1;j<=pn-1;++j){//-1是因为prime数组是从0开始存数据的 count++; if(j==pn-1){//因为行末不能有多于空格,所以要特殊处理 printf("%d",prime[j]); break; } if(count<10){ printf("%d ",prime[j]); } else{ printf("%d/n",prime[j]); count=0; } } return 0;}新闻热点
疑难解答