POJ-Goldbach's Conjecture-哥德巴赫猜想
2018-02-22 20:38
141 查看
[align=center]哥德巴赫猜想[/align][align=center]题目链接:点击打开链接[/align]题意大概是:一个大于4的偶数必能表示为两个奇素数之和。例如:
8 = 3 + 5;3和5都是奇素数。
20 = 3 + 17 = 7 + 13;
42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23注意到,对于大于4的偶数n (n >= 6 && n % 2 ==0),n = p + q, p ,q均为素数,不妨设p <= q, 则p必在3与n/2之间
在for循环中判断p为素数时, n - p 是否为素数, 若是,则按照题目要求输出,再continue即可。由于循环时第一个素数p自小向大增加,这就保证了输出的结果符合题意:如果有多于一对奇素数加起来为n,则选择差值b - a最大的那一对。
代码如下:
8 = 3 + 5;3和5都是奇素数。
20 = 3 + 17 = 7 + 13;
42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23注意到,对于大于4的偶数n (n >= 6 && n % 2 ==0),n = p + q, p ,q均为素数,不妨设p <= q, 则p必在3与n/2之间
在for循环中判断p为素数时, n - p 是否为素数, 若是,则按照题目要求输出,再continue即可。由于循环时第一个素数p自小向大增加,这就保证了输出的结果符合题意:如果有多于一对奇素数加起来为n,则选择差值b - a最大的那一对。
代码如下:
#include <iostream> #include <cmath> using namespace std; int is_primer(int n); // 判断是否为素数 int main() { int i, n, flag = 1; // flag为标识,flag为1时表示哥德巴赫猜想错误 while (cin >> n && n) { if (n == 6) { cout << "6 = 3 + 3\n"; continue; } for (i = 3; i <= n/2; i++) // i从3开始是由于条件给出的是奇素数,而除了2,所有的素数均为奇数 { if (is_primer(i) && is_primer(n - i)) // 当i和n - i均为奇素数时 { flag = 0; cout << n << " = " << i << " + " << n - i << endl; break; } } if (flag) cout << "Goldbach's conjecture is wrong.\n"; } } int is_primer(int n) // 判断是否为素数 { if (n <= 1) return 0; int m = floor(sqrt(n) + 0.5); for (int i = 2; i <= m; i++) { if (n % i == 0) return 0; } return 1; }
相关文章推荐
- POJ 2262 / UVa 543 - Goldbach's Conjecture (哥德巴赫猜想)
- poj_2262_Goldbach's Conjecture(哥德巴赫猜想)
- POJ 2262 Goldbach's Conjecture 哥德巴赫猜想
- POJ 2262 Goldbach's Conjecture(哥德巴赫猜想)
- poj 2262 Goldbach's Conjecture 筛法 哥德巴赫猜想
- Poj 2262 Goldbach's Conjecture
- POJ 2262 Goldbach's Conjecture(素数筛选法)
- POJ 2262 Goldbach's Conjecture 笔记
- UVa 686 Goldbach's Conjecture (II) (哥德巴赫猜想)
- POJ-2262-Goldbach's Conjecture 解题报告
- POJ 2262 Goldbach's Conjecture(数论)
- POJ 2909 && HDU 1397 Goldbach's Conjecture(数论)
- 7-3 Goldbach's Conjecture (哥德巴赫猜想)(30 分)
- POJ Goldbach's Conjecture
- POJ 2262 Goldbach’s Conjecture
- 【POJ2262】:Goldbach's Conjecture
- POJ 2909 Goldbach's Conjecture(我的水题之路——任一数为素数对之和)
- Goldbach's Conjecture--POJ 2262
- 【原】 POJ 2262 Goldbach's Conjecture 筛素数 解题报告
- POJ 2262 Goldbach's Conjecture ( 筛选法求素数 )