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



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

  • 相关阅读:
    iptables一次性封多个ip,使用ipset 工具
    计算机网络知识整理
    SpringBoot启动流程及其原理
    CAP与Base理论
    Java7与Java8中的HashMap和ConcurrentHashMap知识点总结
    用chrome浏览器进行前端debug和停止debug
    Java synchronized实现原理总结和偏量锁、轻量锁、重量锁、自旋锁
    WIN10笔记本屏幕亮度无法调节,一直是最高亮度
    Win10任务栏卡死解决方法
    ClassLoader类加载器 & Java类加载机制 & 破坏双亲委托机制
  • 原文地址:https://www.cnblogs.com/AndyDai/p/4734176.html
Copyright © 2011-2022 走看看