您的位置:首页 > 其它

POJ 2262 哥德巴赫猜想证明与素数筛选

2010-11-13 21:28 447 查看
学习筛选1-n内的素数的方法,注意除了2之外的一切素数必然是奇数

此题与哥德巴赫猜想有关。

#include <iostream>
#include <cmath>
using namespace std;
int Array[1000000] = {0};
int main(){
//此题的难点在于如何最高效的在1-1000000内筛选素数,很容易导致超时或者超空间
//从这题要学会素数筛选法
//首先去掉大于2的所有偶数
//cin和cout比printf慢一些,会导致RE
	for ( int i = 4;i < 1000000;i+=2)
	{
		Array[i] = 1;
	}
	for (int i = 3;i<sqrt(1000000 + 0.0);i += 2)
	{
		if (!Array[i])
		{
			int t = i*i;
			int T = i;
			Array[t] = 1;//去掉平方数
			while(t < 1000000){
				T += 2;
				t = i*T;//去掉i的所有倍数i+2倍,i+4倍等等
				Array[t] = 1;
			}
		}
	}
	int n;
	while(scanf("%d",&n),n){
		for (int i = 3;i<=n/2;i++)
		{
			if(Array[i]	== 0 && Array[n-i] == 0)
			{
				printf("%d = %d + %d/n",n,i,n-i);
				break;
			}
		}
}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: