点击(此处)折叠或打开
- package test;
- /**验证3-100中的所有偶数都能表示为两个质数之和*///质数是 除了1和它本身外,不能被其他自然数整除
- public class Guess2 {
- //如果满足猜想就输出\"猜想是正确的\" 不满足就输出\"猜想不正确\"
- public static void main(String[] args) {
- System.out.println(\"在1~100范围内,现在开始证实哥德巴赫猜想:\");
- if (testifyGuess(1, 100)) {
- System.out.println(\"在 1~100范围内,哥德巴赫猜想是正确的。\");
- } else {
- System.out.println(\"哥德巴赫猜想是错误的\");
- }
- }
-
-
- /**
- A.验证哥德巴赫猜想:从最小数low到最大数high拿到每一个数传入到isGoldbach()中进行验证
- 当有一个数不满足就返回false,所有数都满足就返回true*/
- public static boolean testifyGuess(int low, int high) {
- int i, j = 0;
- boolean flag = true;
- for (i = low; i <= high; i++){
- if (i%2 == 0 && i>2){
- if (isGoldbach(i)){
- j++;
- if (j == 5) {
- System.out.println();
- j = 0;
- }
- } else {
- flag = false;
- break;
- }
- }
- }
- return flag;
- }
-
- /**B.真正进行验证哥德巴赫猜想的方法(testifyGuess方法是调用这个方法进行验证的 )
- * 验证整数a是否满足猜想:从1到a/2之间拿到每一个数i, 看i和a-i这一对数是否都是质数
- * 如果是就结束循环返回true,如果在1到a/2之间没有一对数符合就返回false
- */
- public static boolean isGoldbach(int a) {
- int i;boolean flag = false;
- for (i = 1; i <= a / 2; i++) {
- if (isPrime(i) && isPrime(a - i)) {
- flag = true;
- System.out.print(a + \"=\" + i + \"+\" + (a - i) + \" \");
- break;
- }
- }
- return flag;
- }
-
-
-
- /**C.验证一个数是否是质数: 除了1和它本身外,不能被其他自然数整除
- 如果这个数i是1就返回false表示这个数不是质数
- 如果这个数i不是1,就从2到i-1之间拿到每一个数n,判断这个数是否能被n整除
- 如果能整除就返回false表示此数i不是质数,
- 如果2到i-1之间所有数都不能整除i就返回true表示此数是质数
- */
- public static boolean isPrime(int i) {
- int n; boolean flag = true;
- if (1 == i){flag = false;}
- for (n = 2; n <= i - 1; n++)
- if (i % n == 0) {
- flag = false;
- break;
- }
- return flag;
- }
- }
- //看本题应该从下往上看,先看懂isPrime()然后,再看isGoldbach最,后看testifyGuess
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30246495/viewspace-1669429/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30246495/viewspace-1669429/