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