不使用“埃氏筛法”:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*
下面的例子用来求100以内的素数并输出
*/
// p数组用来存放是否为素数的标志,prime数组用来存放所有的素数
int p[100]={0},prime[100],num=0;
int j;
// 判断素数的函数
int judgePrime(int n){
int i;
// 从2开始
for(i=2;i<sqrt(n);i++){
if(n%i==0){
return 0;
}
}
return 1;
}
// 求素数表的函数(数组表示)
void findPrime(){
for(j=2;j<=100;j++){
int mark=judgePrime(j);
if(mark==1){
prime[num++]=j;
p[j]=1;
}
}
}
int main(){
findPrime();
for(j=0;j<num;j++){
printf("%5d",prime[j]);
}
return 0;
}
使用“埃氏筛法”:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
/*
下面的例子用来求100以内的素数并输出
使用埃氏筛法
*/
// p数组用来存放是否为素数的标志,prime数组用来存放所有的素数
int p[100]={0},prime[100],num=0;
int j;
// 求素数表的函数(使用了埃氏筛法)
void findPrime(){
int i;
for(j=2;j<=100;j++){
// 代表当前这个是一个素数
if(p[j]==0){
prime[num++]=j;
// 以下是筛出非素数的处理逻辑,把所有是j的倍数的全都筛掉
// 从j的2倍开始筛选,每次增长的长度是j的大小
for(i=j+j;i<=100;i=i+j){
// 表示这不是一个素数
p[i]=1;
}
}
}
}
int main(){
findPrime();
for(j=0;j<num;j++){
printf("%5d",prime[j]);
}
return 0;
}