埃拉托色尼筛选法

算法目的:求n以内素数(时间复杂度:O(n) )

算法思想:合数可以看作质数的乘积,因此将所有的质数整数倍去除后剩下的都是质数,2的整数倍去除后向后检测第一个数是3是质数,这是因为3不是它之前的所有质数的乘积那么3的因子只有1和3,还不理解的话可以考虑质数的定义:因子只有1和它本身的数是质数,而因子分到不能再分的时候就是质数,那么反过来将n前所有有效因子去掉后还没找到它的因子的话n就是一个质数。

参考代码如下(C语言)

#include
int main() {
	unsigned int n, a[100] = {0};
	scanf("%d", &n);
	for (int i = 2; i < n; i++) {
		if(!a[i])
			for (int j = i+i; j < n; j += i) {
				a[j] = 1;
			}
	}
	for (int i = 2; i < n; i++)
	{
		if (!a[i]) {
			printf("%d\n", i);
		}
	}
}

你可能感兴趣的:(算法,数据结构)