POJ 2262 Goldbach's Conjecture 哥德巴赫猜想

原创 2012年03月29日 16:48:47

题目:

       1742年,哥德巴赫提出一个猜想:任何大于4的偶数都可以表示为两个奇素数之和。例如:8=3+5,其中3和5都是奇素数, 20=3+17=7+13。42=5+37=11+31=13+29=19+23.

现在的任务是在1,000,000以内验证哥德巴赫猜想。

输入:

        输入包含一个或多个数字n,n均为偶数且6<=n<1000000。输入以0结束。

输出:

        对于每个数字,打印出一行n = a + b,其中a和b都是奇素数,数字和操作符之间恰好隔一个空格。如果a和b有多对,则输出b-a最大的那对。如果找不到这样的a、b对,则输出 "Goldbach's conjecture is wrong."

样例输入:

8

20

42

0

样例输出:

8 = 3 + 5

20 = 3 + 17

42 = 5 + 37

解题思路:

最小的奇素数是3,令a=3,求出b=n-a,

   如果b也为奇素数,则猜想成立,输出结果

   如果b不为奇素数,则令a为紧跟着a的下一个奇素数,重复计算b=n-a,直到b为奇素数或者a已经大于n的一半为止。(当a大于n的一半时,说明n不能表示为两个奇素数之和,猜想不成立)


代码:

#include<stdio.h>

//判断一个数是否是奇素数 
int isOddPrime(int num)
{
	int i;
	if(num%2==0) return 0;
	for(i=2; i*i<=num; i++)
	  if(num%i==0) return 0;
	return 1;
}

//获得指定奇素数的下一个奇素数 
int getNextOddPrime(int num)
{
	num++;
	while(!isOddPrime(num)) num++;
	return num;
}

int main()
{
	int n,a,b;
	scanf("%d", &n);
	while(n != 0)
	{
		a=3;
		b=n-a;
		while(!isOddPrime(b))
		{
			a = getNextOddPrime(a);
			b=n-a;
			if(a > n/2) break;
		}
		if(a > n/2) printf("Goldbach's conjecture is wrong.\n");
		else printf("%d = %d + %d\n", n, a, b);
		
		scanf("%d", &n);
	}
	return 0;
}




POJ2262-Goldbach's Conjecture

转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1299063931提示:100W真是大的BT。。。。我用了优化还是勉强AC掉,认识的一位达人...
  • lyy289065406
  • lyy289065406
  • 2011年07月29日 01:57
  • 3414

POJ Goldbach's Conjecture

Language: Default Goldbach's Conjecture Time Limit: 1000MS   Memory Limit: 65536K ...
  • DoJintian
  • DoJintian
  • 2014年10月04日 19:49
  • 337

POJ2909_Goldbach's Conjecture【素数判断】【水题】

题目大意:给出一个偶数,要求在这个偶数的范围内,有几对素数和是等于这个偶数的 注意素数对的不重复性! 比如 n = a + b(a,b为素数) 则n = b + a 就重复了 思路:只需要枚举2到...
  • u011676797
  • u011676797
  • 2014年09月24日 09:01
  • 1056

POJ 2262 Goldbach's Conjecture(哥德巴赫猜想)

题目链接:http://poj.org/problem?id=2262 名字很牛,其实题目并不难,但是注意优化一下循环代码以防超时。输出很坑,"n = a + b"中,各个字符要空格,否则一直PE....
  • qq_30076791
  • qq_30076791
  • 2015年08月13日 22:29
  • 702

hdu 1397 Goldbach's Conjecture

题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1397 题目描述: Goldbach's Conjecture Time Limi...
  • hackerwin7
  • hackerwin7
  • 2014年12月05日 13:13
  • 1626

poj 2262 Goldbach's Conjecture 筛法 哥德巴赫猜想

poj 2262 Goldbach's Conjecture 筛法 哥德巴赫猜想 In 1742, Christian Goldbach, a German amateur mathematician...
  • k_l_c_
  • k_l_c_
  • 2016年08月09日 08:57
  • 263

【哥德巴赫猜想】POJ Goldbach's Conjecture 2262

Goldbach's Conjecture Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4...
  • ydd97
  • ydd97
  • 2015年09月07日 09:23
  • 590

POJ 2262 Goldbach's Conjecture哥德巴赫猜想

http://poj.org/problem?id=2262 Goldbach's Conjecture Time Limit: 1000MS   Memory Limit: 65536K...
  • u011300443
  • u011300443
  • 2013年07月08日 22:31
  • 1548

Poj 2262 Goldbach's Conjecture

Goldbach's Conjecture Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 41987   Acc...
  • xuhuanfeng232
  • xuhuanfeng232
  • 2016年01月27日 18:15
  • 208

【poj 2262】 Goldbach's Conjecture

题意:让你验证哥德巴赫猜想,即:任意一个大于2的偶数可以拆成两个质数的和。思路:用筛法筛出来素数,枚举验证即可。代码:#include #include using namespace std; ...
  • yhf_2015
  • yhf_2015
  • 2016年10月18日 15:14
  • 96
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 2262 Goldbach's Conjecture 哥德巴赫猜想
举报原因:
原因补充:

(最多只允许输入30个字)