POJ 2262 Goldbach's Conjecture

简介: POJ 2262 Goldbach's Conjecture

Problem 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.”


Sample Input

8

20

42

0


Sample Output

8 = 3 + 5

20 = 3 + 17

42 = 5 + 37


用打表法

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int sum(int x){
    int i;
     int t = sqrt ( x + 0.5 ) ;
    for(i=2;i<=t;i++){
        if(x%i==0)
            return 0;
    }
    return 1;
}
int arr[500005],j=0;
void a(){
       int i;
    for(i=3;i<500000;i++){
        if(sum(i))
            arr[j++]=i;
    }
}
int main(){
    int m,i;
    a();
    /**for(i=0;i<10;i++)
    {
        printf("%6d",arr[i]);
    }**/
    while(1){
        int m;
        scanf("%d",&m);
    if(m==0){
        return 0;
    }
    if(m==6){
        printf("6 = 3 + 3\n");
    }
    else{
        int flag=0;
        for(i=0;i<m/2&&m/2>arr[i];i++)
        if(sum(m-arr[i])==1){
                flag=1;
                //printf("i=%d\n",i);
            break;
        }
       if(flag){
            //printf("##i=%d\n",i);
           printf("%d = %d + %d\n",m,arr[i],m-arr[i]);
       }
       else
          printf("Goldbach's conjecture is wrong.\n");
    }
    }
    return 0;
}
目录
相关文章
|
7月前
|
人工智能
POJ 3104 Drying
POJ 3104 Drying
POJ 1936 All in All
POJ 1936 All in All
63 0
|
人工智能
POJ 2531
初学dfs参考别人代码,如有雷同,见怪不怪。#include using namespace std; int aa[25][25]; int maxa=0; int step[25]={0},n; void dfs(int a,int b) { int t=b; step...
676 0
|
算法 数据建模 机器学习/深度学习
poj-2551-ones
Description Given any integer 0
748 0
POJ 2262 Goldbach&#39;s Conjecture
Problem Description In 1742, Christian Goldbach, a German amateur mathematician, sent a letter to Leonhard Euler in which he made the foll...
968 0
|
人工智能
POJ 1936 All in All
Description You have devised a new encryption technique which encodes a message by inserting between its characters randomly generated strings in a clever way.
756 0