思路:

  1. 首先判断输入的偶数 n 是否大于 6,若不大于 6,则输出"请输入大于6的偶数";
  2. 从 2 开始遍历到 n-2,判断每个数是否为素数;
  3. 若当前遍历到的数 i 是素数,那么判断 n-i 是否也是素数;
  4. 若 n-i 也是素数,则输出分解表达式 n = i + (n-i);
  5. 为了保证输出的是字典序最小的分解表达式,我们从 2 开始遍历,并且先找到的分解表达式即为字典序最小的;
  6. 若遍历完毕都没有找到符合条件的分解表达式,则输出"Goldbach's conjecture is wrong."。

代码如下:

#include #include using namespace std;

bool isPrime(int n) { if(n == 1) return false; for(int i = 2; i <= sqrt(n); i++) { if(n % i == 0) return false; } return true; }

int main() { int n; cin >> n; if(n <= 6 || n % 2 != 0) { cout << "请输入大于6的偶数" << endl; return 0; } for(int i = 2; i <= n-2; i++) { if(isPrime(i) && isPrime(n-i)) { cout << n << "=" << i << "+" << n-i << endl; return 0; } } cout << "Goldbach's conjecture is wrong." << endl; return 0;

描述伟大的哥德巴赫猜想事:任何一个大于 6 的偶数总可以分解为两个素数之和。现在请你编程验证哥德巴赫猜想即输入一个大于 6 的偶数 n 将其分解为两个素数之和输出。如果有多种分解答案请输出字典序最小的那一个。输入描述一行一个正整数 n 。输出描述一行一个表达式表示字典序最小的一种分解方法具体格式参见样例。用例输入 1 6用例输出 1 6=3+3用例输入 2 14用例输出 2 14=3+11来源On

原文地址: http://www.cveoy.top/t/topic/iNsI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录