欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用筛选法求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;
}