UVa Problem 10168 Summation of Four Primes (四素数之和)

本文介绍了一个解决四素数之和问题的算法实现,通过哥德巴赫猜想验证了任何大于等于8的整数可以表示为四个素数之和。文章提供了完整的C++代码示例,包括素数判断、偶数分解为两个素数之和的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// Summation of Four Primes (四素数之和) // PC/UVa IDs: 110705/10168, Popularity: A, Success rate: average Level: 2 // Verdict: Accepted // Submission Date: 2011-06-11 // UVa Run Time: 0.128s // // 版权所有(C)2011,邱秋。metaphysis # yeah dot net // // 这两个猜想对于题目指定范围内的数都已经验证了,能够成立,故需要利用这两个猜想。若数 n <= // 7,则不可能拆分为 4 个素数之和,若 n 为大于等于 8 的数,当 n 为偶数时,n - 2 - 2 仍为偶 // 数,当 n 为奇数时,n - 2 - 3 为偶数,按照哥德巴赫猜想,任何大于等于 4 的偶数都可以 // 表示成 2 个素数之和。 #include <iostream> #include <cmath> using namespace std; // 判断某数是否为素数。 bool is_prime(long n) { if (n == 2) return true; if (n % 2 == 0) return false; for (int c = 3; c <= ceil(sqrt(n)); c += 2) if (n % c == 0) return false; return true; } // 将偶数拆分为 2 个素数之和。 void even(long number, long *a, long *b) { if (number == 4) { *a = 2; *b = 2; return; } for (int c = 3; c <= number / 2; c += 2) if (is_prime(c) && is_prime(number - c)) { *a = c; *b = number - c; break; } } int main(int ac, char *av[]) { long n, a, b; while (cin >> n) { if (n <= 7) { cout << "Impossible." << endl; continue; } if (n % 2) { even(n - 5, &a, &b); cout << "2 3 " << a << " " << b << endl; } else { even(n - 4, &a, &b); cout << "2 2 " << a << " " << b << endl; } } return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值