令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
备注:已知条件只有两个,不知道自然数遍历范围,所以只能通过是否找到第N个素数来决定程序是否停止。
1.读入条件M,N。
2.从2开始计算素数,计算出来的素数存入数组prime[N](最多需要找出N个素数)。
3.找到第i个,判断i是否属于[M,N],如果属于,则输出i,然后存入素数数组prime,继续下一个。如果不属于,则存入素数数组prime,继续下一个。
3.1输出的时候通过col列变量判断此行输出了几个素数,如果第十个,则换行,如果不是则加空格
4.找到第N个后停止。
#include <stdio.h> int IsPrime(int, int, int*); int main() { int start, end; scanf("%d%d", &start, &end); int i; int cnt=0; int prime[end]; /*存放素数数组*/ int col=0; for(i=2; cnt<end; i++) /*开始计算素数,直到个数满足end个数*/ { if(IsPrime(i, cnt, prime)) /*判断 i 是否为素数,如果是:素数计入prime[]数组,计数器cnt加1*/ { prime[cnt] = i; cnt++; if(cnt>=start && cnt<=end) { printf("%d", i); if(col<9 && cnt<end) { printf(" "); col++; } else if(col==9 && cnt<end) { printf("\n"); col=0; } } } } return 0; } int IsPrime(int x, int cnt, int *p) /*判断x是否为素数,通过“x整除x以内的素数是否为零”判断*/ { int flag=1; int i; for(i=0; i<cnt && x>2 && (p[i]*p[i]<=x); i++) { if(x%p[i]==0) { flag=0; break; } } return flag; }
623



被折叠的 条评论
为什么被折叠?



