/*
验证歌德巴赫猜想:
输入一个大于 6 的偶数,
请输出这个偶数能被分解为哪两个质数的和。
如 10=3+7 12=5+7
要求
两个人一组合作完成。
一个人负责把一个整数 n 拆分成两个整数的和,
另一个人负责写一个函 数,判断某一个整数 a 是否是质数
*/
//创建包
package classes;
//导包
import java.util.Scanner;
//创建类
class Test12{
//main方法
public static void main(String[] args){
//创建Scanner类 用于用户输入
Scanner sc = new Scanner(System.in);
//输出提示语句
System.out.println(" 撒~给出你的数字 ");
//定义Sanner类对象的变量数据类型
int n = sc.nextInt();
//创建方法类对象
Mathod ma = new Mathod();
//使用定义方法时的返回值类型 来接受方法返回的结果
int m = ma.even(n);
//对m进行判断
//如果m=0那就说明 不是大于6的偶数
if(m==0)System.out.println(" 输入有误 ");
//否则就调用mathod类中判断质数的方法
//参数传递m
else {
//建立for循环将需要传递的参数 传递给mathod类中的判断质数的方法
for(int i = 2; i<m/2 ; i++){
//进行判断 因为需要判断两个数字是不是都是质数
//所以 将两个需要判断的数字都需要调用判断质数的方法
//又因为 这两个数字相加等于用户输入的数字
//那么第一个参数 就是 循环变量 第二个参数就是用户输入的数字减去循环变量
if(ma.promes(i) && ma.promes(m-i)){
//当两个都为true时布尔表达式才会成立
//如果成立那么就输出 i 和 m-i
//输出语句
System.out.println(m+" 是 "+i+" 和 "+(m-i)+" 两个质数的和 ");
}
}
}
}
}
//定义接口
interface MathodTool{
boolean promes(int n );
}
//定义方法类
class Mathod implements MathodTool{
//定义判断这个数是不是大于6的偶数
//如果是那么返回这个数字 不是就是返回0
public int even(int n ){
if(n>6 && n%2==0) return n;
else return 0 ;
}
//定义一个方法 用来判断这个数字是不是质数
//方法的返回值为boolean类型
public boolean promes(int n ){
//建立循环来判断传入的参数是不是质数
for(int i = 2; i<n/2 ; i++){
//如果用户输入的数字除以循环变量i 等于0
//那么这个数就不是质数 返回false 让循环继续执行
//如果整个循环结束后都没有返回false
//那么这数字就是质数
if(n%i==0){
return false;
}
}
return true ;
}
}