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;
}




相关文章推荐

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
  • 229

POJ-2262 Goldbach's Conjecture 解题报告(数论) 哥德巴赫的猜想

连接--K -Goldbach's Conjecture Time Limit:1000MS    Memory Limit:65536KB    64bit IO Format:%I64d &...

HDU - 1397 Goldbach's Conjecture(哥德巴赫猜想)

素数筛法

POJ 2909 哥德巴赫猜想

1 描述 对于任意n≥4n \ge 4的整数,存在素数p1,p2使得n=p1+p2p_1,p_2使得n = p_1 + p_2,给定n,找出所有符合条件的素数对的个数,注意:(p1,p2)和(p2,...

POJ2262-Goldbach's Conjecture

  • 2011年07月29日 01:26
  • 8KB
  • 下载

用C语言来验证哥德巴赫猜想(定义的是int型)

哥德巴赫猜想:如果任意一个大于6的偶数都可以写成两个素数之和。

CF#324-D-Dima and Lisa-暴力水题-弱哥德巴赫猜想

http://codeforces.com/contest/584/problem/D 给你一个奇数n,让你分解成3个素数。。。并输出。。。   。 先令m=n-3,m必为偶数。。。。根据哥德巴...
  • viphong
  • viphong
  • 2015年10月07日 03:39
  • 486

HDU1397-哥德巴赫猜想

Goldbach's Conjecture Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O...

Codeforces Round #382 (Div. 2)-735D. Taxes(哥德巴赫猜想?!)

D. Taxes time limit per test2 seconds memory limit per test256 megabytes inputstandard input out...

偶数哥德巴赫猜想

已知不小于6的偶数都可以分成两个素数之和。请编写6到100000的所有偶数的分解,若有一个偶数可以分解成多个素数之和,只需写出一种即可。 #include #include using name...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 2262 Goldbach's Conjecture 哥德巴赫猜想
举报原因:
原因补充:

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