哥德巴赫猜想

哥德巴赫猜想:任一大于2的偶数,都可表示成两个素数之和。

---------------------------------验证---------------------------------------
2000以内大于2的偶数都能够分解为两个素数之和。


分析

为了验证哥德巴赫猜想对2000 以内大于2的偶数都是成立的,要将整数分解为两部分(两个整数之和),然后判断分解出的两个整数是否均为素数。若是,则满足题意;否则重新进行分解和判断。素数测试的算法可采用试除法,即用2,3,4,…,√n 去除n,如果能被整除则为合数,不能整除则为素数。


#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int prime(int n);
int main(){
	int i,n;
	for(i=4;i<=2000;i+=2){
		for(n=2;n<i;n++)
			if(prime(n))
			    if(prime(i-n)){
			    	cout<< i <<"="<< n <<"+"<<i-n<<endl;
			    	break;
				}
			if(n==i)
			    cout<<"error "<<endl;
	}
	return 0;
}
int prime(int i){
	int j;
	if(i<=1)    return 0;
	if(i==2)    return 1;
	for(j=2;j<=(int)(sqrt((double)i));j++)
	    if(!(i%j))   return 0;
	return 1;
}

or

#include <stdio.h>
#include <stdlib.h>
int creatprime(int n, int prime[]) {
    int i, j;
    for (i = 2; i <= n; i++) prime[i] = 1;
    prime[0] = prime[1] = 0;
    for (i = 2; i * i <= n; i++) {
        if (prime[i] == 1) {
            for (j = 2 * i; j <= n; j++) {
                if (j % i == 0)
                    prime[j] = 0;
            }
        }
    }
}
int main() {
    int n, i, j, flag;
    int *prime;
    printf("哥德巴赫猜想验证\n");
    printf("输入一个要验证的最大值 n(n>=6): ");
    scanf("%d", &n);
    if (n < 6) {
        printf("数据输入错误!\n");
        return 0;
    }
    if (!(prime = (int *)malloc(sizeof(int) * n))) {
        printf("分配内存失败!\n");
        getchar();
        return 0;
    }
    creatprime(n, prime);
    for (i = 6; i <= n; i++) {
        flag = 1;
        for (j = 2; j < 1 / 2; j++) {
            if (j % 2 == 0 || (i - j) % 2 == 0)
                continue;
            if (prime[j] == 1 && prime[i - j] == 1) {
                printf("%d=%d+%d\n", i, j, i - j);
                flag = 0;
                break;
            }
        }
        if (flag == 1) {
            printf("找到一个不符合要求的偶数: %d\n", i);
        }
        getchar();
        return 0;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值