Poj 2662,2909 Goldbach's Conjecture (素数判定)

一、Description

In 1742, Christian Goldbach, a German amateur mathematician, sent a letter to Leonhard Euler in which he made the following conjecture:
Every even number greater than 4 can be
written as the sum of two odd prime numbers.

For example:
8 = 3 + 5. Both 3 and 5 are odd prime numbers.
20 = 3 + 17 = 7 + 13.
42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23.

Today it is still unproven whether the conjecture is right. (Oh wait, I have the proof of course, but it is too long to write it on the margin of this page.)
Anyway, your task is now to verify Goldbach's conjecture for all even numbers less than a million.

Input

The input will contain one or more test cases.
Each test case consists of one even integer n with 6 <= n < 1000000.
Input will be terminated by a value of 0 for n.

Output

For each test case, print one line of the form n = a + b, where a and b are odd primes. Numbers and operators should be separated by exactly one blank like in the sample output below. If there is more than one pair of odd primes adding up to n, choose the pair where the difference b - a is maximized. If there is no such pair, print a line saying "Goldbach's conjecture is wrong."
二、题解
        一看到这个题目的时候思路还是很清晰的,心想很快就能做完的,但是没想到WA了不下6次。那个自己写的判断奇素数的方法测试数据都没有问题,但不知道怎么回事就是过不了。后来用了别人用的判断素数的方法,最后过了。最简单的方法:用n除以2 ~ n^2,有一个能除尽就不是素数,否则是素数。时间复杂度:O(sqrt(n))。题目不难,但有些方法的运用还是存在考虑不全的情况。这里有详细的素数判断方法介绍http://wxdlut.blog.163.com/blog/static/128770158200910129412537/
       poj2909与此题相同,只是输出的是等式的个数。
三、Java代码
import java.util.Scanner;

public class Main {
	public static boolean isOddPrime(int a){
		for(int i=2;i*i<=a;i++){
			if(a % i==0)
				return false;
		}
		return true;
	}
	public static void conjecture(int n){
		int i=3;
		while(i<=n){
			 if(isOddPrime(i) && isOddPrime(n-i)){
				 System.out.println(n+" = "+i+" + "+(n-i));
				 break;
			 }
			 i+=2;
		 }
	}
 public static void main(String[] args){
	 Scanner cin=new Scanner(System.in);
	 int n;
	 while((n=cin.nextInt())!=0){
			 conjecture(n);
	 }
  }
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/AndyDai/p/4734176.html