[从0爱上编程]素数+埃氏筛法

不使用“埃氏筛法”:

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值