证明不小于6的偶数都是两个素数之和

所谓哥德巴赫猜想,是指哥德巴赫在教学中发现,每个不小于6的偶数都是两个素数之和。大家都相信这个猜想是正确的,但不能证明。

对于哥德巴赫猜想的验证,算法很简单,其基本思路是:设n为大于等于6的一个偶数,可将其分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则在该数得到验证。若n1不是素数,就不必再检查n2是否素数。先从n1=2开始,检验n1和n2(n2=n-n1)是否素数。然后使n1+2再检验n1、n2是否素数……,直到n1=n/2为止。

int PrimeNum(int i) //判断数i是否为质数
{
    int j,flag=1;
    for(j=2;j*j<=i-1;j++) //循环除以每个数
    {
        if(i%j==0) //i能被j整除,表示不是质数
        {
            flag=0;
            break;
        }
    }
    return flag; //返回结果
}
int main()
{
    int n,i,j,flag;for(i=6;i<=n;i+=2) //从6开始,循环验证各偶数
    {
        flag=1;
        for(j=2;j<=i/2;j++) //判断组成每个数的两个加数
        {
        //如果有一个加数是偶数则不判断
          if(j%2==0 || ((i-j)%2==0)) continue;//若一个加数是偶数,不进行素数判断
          if(PrimeNum(j) && PrimeNum(i-j)) //若两个加数都是素数
          {
              printf("%d=%d+%d\n",i,j,i-j);//输出素数
              flag=0; //清除标志
              break;
          }
        }
        if(1==flag)//若某个偶数不是由两个奇数组成
            printf("找到一个不符合要求的偶数:%d\n",j);
    }
    getch();
    return 0;
}
时间: 2024-07-28 20:27:27

证明不小于6的偶数都是两个素数之和的相关文章

在c#用控制语句完成哥德巴赫猜想(一个大于二的偶数一定是两个质数之和)

思路:首先分析判断,整个程序都是重复输入数字,所以整个过程都是在一个死循环语句中,这是就可以用一个whil语句,条件为true:其次对用户输入的数字input进行判断,去除小于等于2和大于2的基数,剩下的数字就能满足条件了:再然后找出1-input之间的的一个质数i:这是定义一个k,k等于input-i:再判断i,如果i也是质数,那就可以输出input=i+k:最终完成计算.(当编码太多时,最好创建区间来分开,这易于分析和找错) 代码如下: while (true) { Console.Writ

python实现哥德巴赫猜想(任何大于或者等于6的整数都可以写成2个素数之和)

1.要求1.1 从键盘上输入整数你n(n>=6).检验6-n之间的所有偶数2.2 若检验成功则输出6=3+3,即一个偶数写成2个素数之和的形式(注意:只输出一种满足要求的情况即可,切前一个数小于或者等于后一个数) 2.例:输入6:输出 6=3+3输入10:6=3+38=3+510=3+7 3.具体实现: oushu = [] #保存偶数sushu = [] #保存素数num = int(input("数字:"))#用于求偶数def nums():global oushu,numi

哥德巴赫猜想: 任何一个大于2的偶数都可以拆分为两个素数的和

打印出小于2000的偶数拆分情况: var goldbach = function (n){ for(var i = 2;i<n; i++){ if(isPrime(i) && isPrime(n-i)){return {n1:i,n2:(n-i)} ;} } return undefined; } var isPrime = function (n){ for(var i = 2; i< n; i++){if(n%i == 0){return false;}} return

验证哥德巴赫猜想,每个大于等于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(

华为OJ平台——查找组成一个偶数最接近的两个素数

1 import java.util.Scanner; 2 3 /** 4 * 问题描述:任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况, 5 * 本题目要求输出组成指定偶数的两个素数差值最小的素数对,其中 5 < n <= 10000 6 * eg:输入20,输出7 13 7 */ 8 public class PrimePair { 9 10 public static void main(String[] args) { 11 Scanner cin = ne

【华为OJ】【079-查找组成一个偶数最接近的两个素数】

[华为OJ][算法总篇章] [华为OJ][079-查找组成一个偶数最接近的两个素数] [工程下载] 题目描述 任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对 输入描述 输入一个偶数 输出描述 输出两个素数 输入例子 20 输出例子 7 13 算法实现 import java.util.Scanner; /** * Author: 王俊超 * Date: 2016-01-03 20:44 * Declaration:

华为OJ——查找组成一个偶数最接近的两个素数

题目描述 任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对 输入描述: 输入一个偶数 输出描述: 输出两个素数 输入例子: 20 输出例子: 7 13 思路:先找出满足条件的两个素数i和n-i,再运用循环来找出距离最近的那两个素数 import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner s

40.验证哥德巴赫猜想:一个大于2的偶数总可以分解成两个素数的和

//1.输入一个偶数.判断是否为偶数 //2.若是,求出小于其的所有素数 //3.将它们求和 //4.验证是否满足哥德巴赫猜想 #include<iostream> #include<cmath> using namespace std; int Sushu(int); int main() { int n,k,q; int a[1000]; begin: cout<<"please input an even number(偶数):"<<

hdu 2098 分拆素数和(一个偶数拆分成两个不同素数和 拆法数量)

传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2098 分拆素数和 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 46434    Accepted Submission(s): 20210 Problem Description 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input