哥德巴赫猜想 C

#include <stdio.h>
#include <math.h>


#define MAX 1000

int main(void)
{

	int s=6;
	int n=0;
	int b[MAX+1];
    int i;
    int j;
    int a[MAX+1];                // 为直观表示,各元素与下标对应,0号元素不用


    for (i=1; i<=MAX; i++) // 数组各元素赋值
        a[i]=i;

    for (i=2; i<sqrt(MAX); i++)     // 外循环使i作为除数
        for (j=i+1; j<=MAX; j++)  // 内循环检测除数i之后的数是否为i的倍数
        {
            if (a[i]!=0 && a[j]!=0) // 排除0值元素
                if (a[j]%a[i]==0)
                   {
                   	a[j]=0;           // i后数若为i的倍数,刚将其置0(挖去)
                   	n++;
                   }
        }
	
	//以上源代码来自http://blog.pfan.cn/wentao/22158.html
	//以下为本人原创
	for(i=1,j=3;j<=MAX;j++)		//原数组转移至新数组,去掉0值元素
	{
		if(a[j]!=0)
		{
			b[i]=a[j];
			i++;
		}
	}

	/*
	printf("%d\n",MAX-2-n);		
	for(i=1;i<=(MAX-2-n);i++)	
	{
		printf("%5d",b[i]);
	}
	*/
	
	//偶数分解为两个素数之和
	for(i=1;s<=MAX;i++)		//素数一
	{
		for(j=1;s<=MAX;j++)		//素数二
		{
			if(b[i]+b[j]==s)	//素数一加素数二
			{
				printf("%d=%d+%-5d\t",s,b[i],b[j]);	//输出
				s+=2;								//下一个偶数
			}
			if(b[i]+b[j]>s)break;	//如两素数之和大于偶数,则素数一++,素数二重新循环
		}
		if(b[i]>s) 	//如素数一大于偶数,素数一重新赋初值
			i=1;
	}

}
			
	
	
	
	
	
	
	
	

#include <stdio.h>
#include <math.h>


#define MAX 100000

int main(void)
{

	int s=6;

    int i;
    int j;
    int a[MAX+1];                // 为直观表示,各元素与下标对应,0号元素不用


    for (i=1; i<=MAX; i++) // 数组各元素赋值
        a[i]=i;

    for (i=2; i<sqrt(MAX); i++)     // 外循环使i作为除数
        for (j=i+1; j<=MAX; j++)  // 内循环检测除数i之后的数是否为i的倍数
        {
            if (a[i]!=0 && a[j]!=0) // 排除0值元素
                if (a[j]%a[i]==0)
                   {
                   	a[j]=0;           // i后数若为i的倍数,刚将其置0(挖去)

                   }
        }
	
	a[1]=0;
	for(i=3;s<=MAX;)
	{
		if(a[i]!=0)
		{
			
			if(a[s-a[i]]!=0)
			{
				j=s-a[i];
				printf("%d=%d+%-5d\t",s,a[i],a[j]);
				s+=2;
				i=3;
			}
			
		}
		
		//if(a[i]>s) i=3;
		if(a[i]==0||a[s-a[i]]==0) i+=2;
	}
}
	


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值