一、哥德巴赫曾猜测
题目描述 德国数学家哥德巴赫曾猜测:任何大于6的偶数都可以分解成两个素数(素数对)的和。但有些偶数可以分解成多种素数对的和,如:
10=3+7,10=5+5,即10可以分解成两种不同的素数对
输入 输入任意的>6的正偶数(<32767)
输出 试求给出的偶数可以分解成多少种不同的素数对(注: A+B与B+A认为是相同素数对)
样例输入 1234 样例输出 25
1.思路
通过看完题目,分析出这道题主要考的是对素数的求解,即找出目标数中的素数并且某两个求和等于目标数
素数:1不是素数,从2开始,除了1和本身不含其他约数
素数的求法有三种:
我们只需要记住最简单的一种即可
//求是否是素数 public static boolean checked(int num){ for(int i =2;i<=Math.sqrt(num);i++) { if (num % i == 0) { return false; } } return true; }
加入两个素数a+(num-a)=num,即我们可将判断条件设置为checked(a) && checked(num-a) ,这里的话,因为是a和num-a两个数,所以循环时候总数只需要循环到一半即可
2.代码
import java.util.Scanner; public class thirdtest{ //image: public static void main(String[] args) { Scanner s = new Scanner(System.in); int number = s.nextInt(); int count = 0; if(number<6 || number%2!=0 || number>=32767){ System.exit(0); } int j =0; for(int i=3;i<=number/2;i+=2){ j=number-i; if(checked(i) && checked(j)){ System.out.println(i+" "+j); count+=1; } } System.out.print(count); } //求是否是素数 public static boolean checked(int num){ for(int i =2;i<=Math.sqrt(num);i++) { if (num % i == 0) { return false; } } return true; } }