• 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);
    	 }
      }
    }



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

  • 相关阅读:
    nodejs 文件拷贝
    MySQL linux二进制安装
    【Android工具类】验证码倒计时帮助类CountDownButtonHelper的实现
    JAVA一些基础概念
    程序猿生存定律-公司选择上的方法论
    Leetcode 第 2 题(Add Two Numbers)
    SpringMVC学习记录(五)--表单标签
    算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS
    CentOS 7 virt-manager 无法连接本地的hypervisor
    Android自己定义View画图实现拖影动画
  • 原文地址:https://www.cnblogs.com/AndyDai/p/4734177.html
Copyright © 2020-2023  润新知