求素数思路:
我的博客:1007. 素数对猜想 (20)
/* coded by indere
题目:
令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
分析:
与‘1007素数对猜想’思路一样来求素数,存入数组中,然后根据输入的索引值来输出答案。
注意:格式的问题。每十个为一行,最后一行的末尾不要输出‘ ’。
*/
#include<stdio.h>
#define MAXSIZE 10000
void setprimeArr(int *primeArr); /*求得素数数组*/
void printprimeArr(int *primeArr,int index1, int index2); /*按索引输出素数*/
int main() {
int primeArr[MAXSIZE] = { 0 };
setprimeArr(primeArr);
int index1, index2;
scanf("%d %d", &index1, &index2);
printprimeArr(primeArr, index1-1, index2);
return 0;
}
void setprimeArr(int *primeArr) { /*求得素数数组*/
primeArr[0] = 2;
primeArr[1] = 3;
primeArr[2] = 5;
int size = 3;
int num = 6;
int judge = 0;
while (primeArr[MAXSIZE - 1] == 0) {
for (int i = 0; i < size && primeArr[i] * primeArr[i] <= num; i++) {
if (num % primeArr[i] == 0) { /*num不是素数*/
judge = 1;
break;
}
}
if (judge == 0) { /*num没有其他约数,即素数*/
primeArr[size] = num;
++size;
}
++num;
judge = 0;
}
}
void printprimeArr(int *primeArr, int index1, int index2) { /*按索引输出素数*/
int temp = 1;
for (int i = index1; i < index2; i++) {
if (temp >= 10 || i == index2 - 1) {
printf("%d\n", primeArr[i]);
temp = 0;
}
else
printf("%d ", primeArr[i]);
temp++;
}
}