#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void isprime(int *a,int n)
{
memset(a,1,n*sizeof(a[0]));//利用a数组做标记,看这个数是不是不是质数
for (int i = 2; i <= sqrt(n+0.1); i++)
{
if(a[i])
for (int j = i*i; j <= n; j+=i)//这里不从2*i开始是因为,在i的时候,因为选择规律是j+=i,所以如果j=2*i,在之后肯定会到(i+1)*i会重复比如j=2*3里会有4*3
{
a[j] = 0;
}
}
}
int main(){
int n = 0;
scanf("%d",&n);
static const int x = n;
int a[100] = {};
isprime(a,n);
for (int i = 0; i < n; i++)
{
if(a[i] != 0)
printf("%d ",i);
}
return EXIT_SUCCESS;
}
第六章课后题:质数Eratosthenes筛选法
最新推荐文章于 2021-09-29 15:26:49 发布