07-3. 数素数 (20)
时间限制
100 ms
内存限制
32000 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
#include <stdio.h> #include <math.h> //int isprime(int i); /*定义判断素数的函数*/ int isprime(int x)//待传入的参数 { int i,k; int isprime=1;//默认所有待检测数都是素数 //if(m==1) //m++;//m=2; 不考虑区间问题,只定义函数用来判断传入的参数是不是素数 //for(i=m;i<=n;i++)//i是m,n中间一个数,待检测的数,判断这个数是不是素数 //这个步骤在主函数中做 /*if(x<=1) isprime = 0; else if(x==2) isprime = 1; else if(x%2 == 0) isprime = 0; else{ k = sqrt(x)+1; */ for(i=2;i*i<=x;i++)//j是2到j-1的数,被i除的数,依次判断这个数是否被i整除 //比如,15是否被2,3,4,5,····14整除 //或者使用k的定义方法,在头文件调用math库 { if(x%i == 0) { isprime = 0;//如果15检测到3已经发现整除,一定不是素数,停止后面检查,跳出,检测下一个数 //并将默认的素数状态isprime=1的状态改为0 break; } } // } return isprime; } int main() { int i, count=0; int start, end; /* 算出第1个到第end个素数,存放在数组a中 */ scanf("%d %d",&start,&end); int a[end];//使用数组存放,以计数为数组下标 //输入end边界后再定义数组,否则出现数组越界 for(i=2;count<end;i++) { if(isprime(i)){ a[count]=i; count++; } } /* 输出第start个至第end个素数 */ // count=1; 避免多次在函数外使用同名变量,可使用其他变量记录 for(int i=start-1, x=1; i<end; i++)//定义x,一个区别于count的计数变量 //用来记录并计算什么时候添加空格和换行 { printf("%d",a[i]); if(x%10 ==0||i==end-1)//10个数的结尾,换行,注意数组角标越界 printf("\n"); else printf(" ");//添加每个数之间的空格,如果判断不到结尾 x++; } return 0; }