如何用Java验证哥德巴赫猜想?

 我来答
samismiling
推荐于2019-11-11 · 知道合伙人软件行家
samismiling
知道合伙人软件行家
采纳数:1340 获赞数:5603

向TA提问 私信TA
展开全部
  哥德巴赫猜想原描述是“任一大于5的整数都可写成三个质数之和”,欧拉给出等价版本,即“任一大于2的偶数都可写成两个质数之和”,今日常见的陈述为欧拉版本。
  使用Java验证哥德巴赫猜想的代码如下(在代码中要求输入大于6的数字是因为4=2+2、6=3+3,算法直接从8开始验证):

package algorithms;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class GoldbachConjecture {

public static void main(String[] args) {
int i, j, n = 0, f1, f2, m = 0;
System.out.println("验证哥德巴赫猜想。");
System.out.println("输入一个大于6的偶数:");
BufferedReader rr = new BufferedReader(new InputStreamReader(System.in));
try {
m = Integer.parseInt(rr.readLine());
} catch (IOException e) {
}
for (i = 3; i < m / 2; i += 2) {
f1 = f2 = 0;
for (j = 3; j <= i / 2; j += 2) {
if (i % j == 0) {
f1 = 1;
break;
}
}
if (f1 == 1)// 如果i不是质数,下一个i
continue;
// 直到找到一个质数i,这是肯定可以找到的
n = m - i;
for (j = 3; j <= n / 2; j += 2) {
if (n % j == 0) {
f2 = 1;
break;
}
}
if (f2 == 1)
continue;
else
break;
}
System.out.println("大于等于6的偶数" + m + "可以分解为:");
System.out.println(i + "与" + n + "两数之和");
}
}
情场不打烊
优质答主

2018-05-29 · 专注职场八卦,爱好吃瓜。
情场不打烊
采纳数:39 获赞数:6341

向TA提问 私信TA
展开全部

对于任何一个大于2的偶数n,我们可以将其分解为对应两个数之和,如:n=1+(n-1),n=2+(n-2)……,n=(n/2-1)+(n/2+1),n=n/2+n/2,之后的组合如n=(n/2+1)+(n/2-1)已经和之前的组合重复了。

分解的一个数只要从1到n/2就可以了,之后我们需要判断组合的两个数是否为质数,如果是质数,那么该组合舍弃,进行下一对组合判断,如果没有直到结束也没有出现合适组合,那么验证就失败了。

那么如何判断是不是质数?在一般领域,对正整数n,如果用2到√n之间的所有整数去除,均无法整除,则n为质数。质数大于等于2 不能被它本身和1以外的数整除。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式