哥德巴赫猜想

程序地址:http://www.cheemoedu.com/exercise/26

问题描述:

众所周知,哥德巴赫猜想的证明是一个世界性的数学难题,至今未能完全解决。我国著名数学家陈景润为哥德巴赫猜想的证明作出过杰出的贡献。
所谓哥德巴赫猜想是说任何一个大于2的偶数都能表示成为两个素数之和。
编写程序,验证指定范围内哥德巴赫猜想的正确性,也就是近似证明哥德巴赫猜想。

我的代码:

import math
def prime(m):
    count=0
    for i in range(2,int(math.sqrt(m))+1):
        if m%i==0:
            count=1
    if count==1:
        return False
    else:
        return True
a=[]
b=[]
for j in range(2,10):
    if prime(j):
        a.append(j)
for k in a:
    for l in a:
        if (k+l)%2==0 and (k+l) not in b:
            b.append(k+l)
            print "%d=%d+%d" % (k+l,k,l)
#print b

结果:

4=2+2

6=3+3

8=3+5

10=3+7

12=5+7

14=7+7

我的思路:

先求出2到10之间的所有素数a=[2,3,5,7],那么判断的范围就是(包括)2*2到2*7之间的偶数了,判断方法就是判断a中任意两个素数之和是否为偶数(且去重)并添加进列表(素数所组成的4到14之间的所有偶数都在该列表中),最后输出详细结果;

简而言之,我的方法是通过素数的范围来验证的,不是直接根据偶数的范围来验证的;

示例代码:

def isPrimeNumber(n, s):
    for k in s:
        if k ** 2 > n: break
        if n % k == 0: return False
    return True
def fun():
    s = [3]
    for n in xrange(6, 15, 2):
        f = False
        for k in s:
            t = n - k
            if t < k:
                break
            if isPrimeNumber(t, s):
                print ‘%s = %s + %s‘ % (n, k, t)
                if t > s[-1]: s.append(t)
                f = True
                break
        if not f: raise Exception
fun()

结果(将100000修改为15,只列出部分):

6 = 3 + 3

8 = 3 + 5

10 = 3 + 7

12 = 5 + 7

14 = 3 + 11

不明白为什么4不算,没有说两个素数必须不同,那么4=2+2也符合题意的吧,而且14=7+7

14=3+11都应该算是对的吧!

时间: 2024-11-10 07:28:54

哥德巴赫猜想的相关文章

哥德巴赫猜想(升级版)

题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为6除了约数1和6之外还有约数2和3.需要特别说明的是1不是质数. 这就是哥德巴赫猜想.欧拉在回信中说,他相信这个猜想是正确的,但他不能证明. 从此,这道数学难题引起了几乎所有数学家的注意.哥德巴赫猜想由此成为数学皇冠上一颗可望不可及的"明珠". 题目描述 现在请你编一个程序验证哥

循环-04. 验证“哥德巴赫猜想”

循环-04. 验证“哥德巴赫猜想”(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 徐镜春(浙江大学) 数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和.比如:24=5+19,其中5和19都是素数.本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和. 输入格式: 输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N. 输出格式: 在一行中按照格式

P1304 哥德巴赫猜想

题目描述 输入N(N<=10000),验证4~N所有偶数是否符合哥德巴赫猜想. (N为偶数). 如果一个数,例如10,则输出第一个加数相比其他解法最小的方案.如10=3+7=5+5,则10=5+5是错误答案. 输入输出格式 输入格式: 第一行N 输出格式: 4=2+2 6=3+3 …… N=x+y 输入输出样例 输入样例#1: 10 输出样例#1: 4=2+2 6=3+3 8=3+5 10=3+7 先筛一边素数,然后暴力枚举就好 1 #include<iostream> 2 #inclu

Python验证哥德巴赫猜想

今天看到百度知道有人问如何验证1000以内的数符合哥德巴赫猜想,就写了一个 感觉超过10000时有点慢啊,和java比起来效率差了点,希望高手能给优化下 #!/usr/bin/env python __author__ = '淮南霏霏' """ 脚本编写环境python 3.4.2 哥德巴赫猜想 简单验证 """ import math class Goldbach: """ 哥德巴赫猜想:任一大于2的偶数都可写成两

Codeforces Round #324 (Div. 2) D. Dima and Lisa (哥德巴赫猜想 + 暴力)

D. Dima and Lisa Dima loves representing an odd number as the sum of multiple primes, and Lisa loves it when there are at most three primes. Help them to represent the given number as the sum of at most than three primes. More formally, you are given

验证哥德巴赫猜想,每个大于等于4的偶数都可以表示成2个素数之和

验证哥德巴赫猜想,每个大于等于4的偶数都可以表示成2个素数之和. 1 #define _CRT_SECURE_NO_WARNINGS 2 3 #include<stdio.h> 4 #include<stdlib.h> 5 6 int isou(int num)//1代表偶数,0代表奇数 7 { 8 if (num % 2 == 0) 9 { 10 return 1; 11 } 12 else 13 { 14 return 0; 15 } 16 } 17 18 int sushu(

Goldbach&#39;s Conjecture(哥德巴赫猜想)

Goldbach's Conjecture Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5277    Accepted Submission(s): 2022点我 Problem Description Goldbach's Conjecture: For any even number n greater than or equa

c语言验证哥德巴赫猜想(从4开始 一个偶数由两个质数之和)

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 5 int isit(int num) 6 { 7 int i; 8 int flag = 1;//表述为素数 9 if(num==2) 10 { 11 return 1; 12 }else if(num==3) 13 { 14 return 1; 15 }else if(num<=1) 16 { 17 return 0; 18 }el

循环-04. 验证“哥德巴赫猜想”(20)

1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 bool isPrime(long n){ 5 int i; 6 for(i=2;i<=sqrt(n);++i) 7 if(n%i==0) 8 break; 9 if(n>1&&i>sqrt(n)) 10 return true; 11 else 12 return false; 13 } 14 int main(){ 1

C#实现哥德巴赫猜想

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GoetheOfArithmetic { class Program { static void Main(string[] args) { Console.WriteLine("请输入一个大于6的偶数:"); int intNum = Convert.ToInt32(Console.ReadLi