用筛选法求100之内的素数
程序员文章站
2024-03-15 17:07:06
...
所谓筛选法,指的是"埃拉托色尼筛法",采取的方法是,在一张纸上写上1-100 全部的整数
然后逐个判断他们是否为素数,找出一个非素数,就把他挖掉,最后剩下的就是素数
具体做法如下所示:
先把1挖掉,因为1不是素数
用2除它后面的各个数,能把2整除的数挖掉,即就是把2的倍数挖掉
用3除它后面的各个数,把3的倍数全部挖掉
分别用4,5,各数作为除数除这些数后面的各个数。这个过程一直进行到在除数后面的数已经全部被挖掉为止
事实上可以简化,如果需要找到1~n范围内的素数表,只需要进行到除数为根号下n(取其整数即可以)
例如对1~50,只需进行到将7作为除数即可
用计算机解此题,可以定义一个数组,a[1]a[n]分别代表这1n个数
如果检查出数组a的某一个元素的值是非素数,就使得它变为0,最后剩下的不为0的就是素数
#include<stdio.h>
#include<math.h>
int main()
{
int i, j, a[101] ,n ;
for (i = 1; i <= 100; i++)
a[i] = i;//使得a[1]~a[100]的值为1~100
a[1] = 0;//先挖掉a[1]
for (i = 2; i < sqrt(100); i++)
for (j = i + 1; j <= 100; j++)
{
if (a[i]!= 0 && a[j] != 0)
if (a[j] % a[i] == 0)//可以整除,不是素数,挖掉
a[j] = 0;
}
printf("\n");
for (i = 2, n = 0; i <= 100; i++)
{
if (a[i] != 0)
{
printf("%5d ", a[i]);
n++;
}
if (n == 10)
{
printf("\n");
n = 0;
}
}
printf("\n");
return 0;
}