哥德巴赫分解

哥德巴赫猜想认为:不小于4的偶数都可以表示为两个素数的和。

你不需要去证明这个定理,但可以通过计算机对有限数量的偶数进行分解,验证是否可行。

实际上,一般一个偶数会有多种不同的分解方案,我们关心包含较小素数的那个方案。
对于给定数值范围,我们想知道这些包含较小素数方案中最大的素数是多少。

比如,100以内,这个数是19,它由98的分解贡献。
                    
你需要求的是10000以内,这个数是多少?

答案是 173
            
注意,需要提交的是一个整数,不要填写任何多余的内容(比如,说明性的文字)

有些地方可以优化的,比如判段素数和循环的部分,但我觉得没必要。。。想改可以自己改。

另外,malloc那部分可以设置成静态数组,,比如可以直接设置成b[5000]。。。

还有这个程序需要自己输入数字,你可以把它改成题目要求的写法,依然自己改。。。

#include<stdio.h>
#include<stdlib.h>

//判段素数,是1否0
int d_prime(int a)
{
	int i=0;
	for(i=2;i<a;i++)
	{
		if(a%i==0)
			return 0;
	}
	if(i==a)
		return 1;
	else
		return 0;
}

int main()
{
	int i , n , a , c = 0;
	int* b=NULL;
	printf("输入任意大于4的偶数:\n");
	scanf("%d",&c);
	b = (int*)malloc(c * sizeof(int));
	a = c;
	for(a-=2;a>0;a-=2)
	{
		for(n=2;n<(a/2);n++)
		{
			if(d_prime(n)==1&&d_prime(a-n)==1)
			{
				b[i]=n;
				i++;	
				break;
			}
		}
	}
	
	for (n = 0;n<(c/2-2); n++)
	{
		if (b[n] > b[n + 1])
		{
			a = b[n];
			b[n] = b[n + 1];
			b[n + 1] = a;
		}
	}
	printf("%d", b[c/2-2]);
	
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值