(c++)判断素数算法--筛素数法(两种方法)

本实验取材于郭炜老师的《程序设计与算法》
很多人都说判断素数是一个普通初学者算法,因此从不同的判断过程去理解判断素数是非常有必要的

#include<iostream>
using namespace std;
int main(){
	int n;
	cin >> n;
	cout << 2 << endl;
	for(int i=3;i<=n;i+=2){
		int k;
		for(k=3;k<i;k+=2){
			if(i%k==0)
				break;
			if(k*k>i)
				break;
		}
		if(k*k>i) cout << i << endl;
		
	}
	return 0;
	
}

敲黑板:这段代码从3开始起步找素数,步长+2亮眼了,因此这段代码比最普通的步长+1的算法要好!
下面这段算法是筛素数法求解

#include<iostream>
using namespace std;
#define MAX_NUM 100000000
char isPrime[MAX_NUM + 10];
int main()
{
	for(int i=2;i<=MAX_NUM;++i)
		isPrime[i]=1;
	for(int i=2;i<=MAX_NUM;++i){
		if(isPrime[i])
			for(int j=2*i;j<=MAX_NUM;j+=i)
				isPrime[j]=0;
				
	}
	for(int i=2;i<=MAX_NUM;++i)
		if(isPrime[i])
			cout << i <<endl;
	return 0;
}

这段代码使用了典型的空间换时间,也是进阶为高手的常用算法,必须背诵!

发布了16 篇原创文章 · 获赞 2 · 访问量 164

猜你喜欢

转载自blog.csdn.net/m0_37149062/article/details/104778930