zoukankan      html  css  js  c++  java
  • 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);
    	 }
      }
    }



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

  • 相关阅读:
    Cassandra开发入门文档第三部分(非规范化关系结构、批处理)
    Cassandra开发入门文档第二部分(timeuuid类型、复合主键、静态字段详解)
    Cassandra开发入门文档第一部分
    Flume的Source、Sink总结,及常用使用场景
    Libgdx学习笔记:分享自己写的异步加载
    jquery easyui toolbar 分割线问题
    easyui datagrid设置fit: true后,页面显示不全的情况
    CentOS下安装JDK1.7
    CentOS 7搭建SVN服务器
    SWT中ole/activex实践--操作word的一个例子
  • 原文地址:https://www.cnblogs.com/AndyDai/p/4734176.html
Copyright © 2011-2022 走看看