HDU-1262,寻找素数对(素数打表)

Problem Description:

哥德巴赫猜想大家都知道一点吧.我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数.
做好了这件实事,就能说明这个猜想是成立的.
由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的. 

Input: 

输入中是一些偶整数M(5<M<=10000). 

Output: 

对于每个偶数,输出两个彼此最接近的素数,其和等于该偶数. 

Sample Input: 

20 30 40 

Sample Output: 

7 13

13 17

17 23 

解题思路: 

在judge()函数中打出一张1到10000以内的素数表。prime[i]=1表示数i为素数,反之不是。然后再在main()中从接近输入n/2的数开始渐进寻找即可! 

程序代码: 

#include<bits/stdc++.h>
using namespace std;
const int MAXN=10000;
int prime[MAXN+1];
void judge()//找出1到10000中间所有的素数 
{
	memset(prime,0,sizeof(prime));//数组清零 
	int a,flag;
	for(int i=2;i<=MAXN;i++)//打表 
	{
		a=i/2;//一个数不会有大于它自身一半的因子,所以这里可以节省时间 
		flag=1;//标记变量 
		for(int j=2;j<=a;j++)//从2到自身的一半 
		{
			if(i%j==0)//不是素数 
			{
				flag=0;
				break;
			}
		}
		if(flag)
			prime[i]=1;//这个数是素数,数组标记为1 
	}
}
int main()
{
	judge();
	int n,t;
	while(cin>>n)
	{
		t=n/2;
		while(t>=2)
		{
			if(prime[t]&&prime[n-t])
			{
				cout<<t<<" "<<n-t<<endl;
				break;
			}
			t--;
		}
	}
	return 0;
}

 

发布了266 篇原创文章 · 获赞 274 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 点我我会动 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览