5、“筛法”求素数表

5、题目:“筛法”求素数表

所谓“筛法”是古希腊著名数学家埃拉托色尼提出的方法,原理是:在一张纸上写上1~100全部整数,然后逐个判断它们是否是素数,找出一个非素数就把它挖掉,最后剩下的就素数。
具体过程是:
(1)先将1挖掉
(2)用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉
(3)用3去除后面的各位数,把3的倍数挖掉
(4)以此类推直到挖掉10的所有倍数为止.

具体挖法:
一、判断出一个数不是素数后,就把它置0,在输出素数表时,if(a[i]!=0){输出a[i]}
二、判断出一个数不是素数后,把它后面所有数往前移一位,a[j]=a[j+1];j++;n–;(n是没被挖掉的数的数目)
(两种方法各有缺劣)

选用第一种方法:

#include<stdio.h>
int main(){
	int a[100], i, j;
	
	//将1-100输入数组中 
	for(i=0; i<100; i++){
		a[i]=i+1;
	}
	
	//挖掉1
	a[0]=0;
	
	//挖掉能被2、3...9、10等整除的数
	for(j=2; j<=10; j++){
		for(i=j; i<100; i++){	//i=j 表示以j对数组各元素求余时,从下标为j的数组元素开始求余 
			if(a[i]%j==0){
				a[i]=0;
			} 
		}
	}
	
	int cnt=0;					//cnt记录输出素数的个数 
	for(i=1; i<100; i++){
		if(a[i] != 0){
			printf("%3d ", a[i]);
			cnt++;
		}
		if(cnt%10==0){
			printf("\n");		//每输出10个素数换一行 
		}
	} 
	return 0;
}
发布了16 篇原创文章 · 获赞 0 · 访问量 329

猜你喜欢

转载自blog.csdn.net/NAU_LHT/article/details/104144883