Java语言高分悬赏:将一个偶数拆分成2个质数的和,怎么拆分,比如10=7+3
问题描述:
Java语言高分悬赏:将一个偶数拆分成2个质数的和,怎么拆分,比如10=7+3
答
实现思路:
从第一个质数开始尝试,相减得到另一个数,再判断是否是质数。
如果另一个数为0 还是找不到两个质数,说明无法拆成目标结果。
答
public class EvenToPrime {
public static void main(String[] args) {
int num=inPut();
outPut(num);
}
public static int inPut(){
//输入数字并通过检验确定一个符合要求的数
Scanner sc=new Scanner(System.in);
System.out.println("请输入大于2的偶数:");
int num=sc.nextInt();
if(num%2!=0||num<=2){
System.out.println("输入错误,请重新输入大于2的偶数:");
return inPut();//错误则返回inPut()继续输入
}
return num;//正确则返回num值
}
public static boolean isPrim(int num){
//判断是否是质数
for(int i=2;i<=Math.sqrt((double)num);i++){
if(num%i==0){
return false;
}
}
return true;
}
public static void outPut(int num){
//输出所有符合条件的质数对
for(int i=2;i<=num/2;i++){
if(isPrim(i)==true&&isPrim(num-i)==true){
System.out.println(num+"="+i+"+"+(num-i));
}
}
}
}
答
任何一个大于2的偶数都可以被拆分为两个质数相加的结果。
8 = 3 + 5
10 = 5 + 5
44 = 37 + 7
编写代码,验证100以内(含)
所有大于2的偶数都可以表达成两个质数相加
public class J {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i;
int n1,n2;
for(i=4;i<=100;i+=2){
for(n1=2;n1<=i;n1++){
if(pd(n1)==true){
for(n2=2;n2<=i-n1;n2++){
if(pd(n2)==true){
if(n1+n2==i){
System.err.println(i+"="+n1+"+"+n2);
}
}else
break;
}
}else
break;
}
}
}
public static boolean pd(int n){
int j;
boolean f=true;
for(j=2;j<n;j++){
if(n%j==0){
f=false;
}
}
return f;
}
}