帮我完善一下。用筛法求出n以内的素数,n由键盘输入,用数组表示n个数的集合。
#include<stdio.h>#include<math.h>
#define N 100000000
void prime(int n);
int isPrime[N + 1];
int main()
{
int i,n;
scanf("%d", &n);
prime(n);/*调用筛选素数函数*/
for (i = 0; i <= n; i++)/*输出n以内的所有素数*/
{
if (isPrime[i] == 1)
printf("%d\n", i);
}
}
/*筛选从2到n之间的素数,筛选结果存入数组isPrime*/
void prime(int n)
{
int i, j, m;
for (i = 0; i <= n; i++)/*将isPrime数组元素初始化为1*/
isPrime[i] = 1;
isPrime[0] = isPrime[1] = 0;/*0和1不是素数,所以将相应的元素设置为0*/
m = (int)sqrt(n);
for (i = 2; i <= m; i++)
{
if (isPrime[i])/*筛选掉素数的整数倍*/
{
for (j = 2 * i; j <= n; j = j + i)
isPrime[j] = 0;
}
}
}