验证哥德巴赫猜想--函数调用

学习记录–
任何一个大于2的偶数都可以分解成两个素数之和;
任何一个大于5的奇数都可以分解成三个素数之和。

写两个函数验证一下这个著名的猜想。

一个整数N,代表要验证的数,5≤N≤100005 \le N \le 100005≤N≤10000,当N为偶数时,验证哥德巴赫猜想1,当N为奇数时,验证哥德巴赫猜想2。

对每个验证,输出相应的表达式,要求加数构成的序列的字典序最小,即确保第一位最小,再确保第二位最小(再确保第三位最小)。

N=13,13=3+3+7=7+3+3

//也可以在两个被调用函数里面再次调用求素数函数使代码简洁
#include <stdio.h>
#include <math.h>
void OddDiv(int n)
{
         int a,b,i,j,k,h;
    for(a=2;a<n;a++)  //先将奇数分解为一个素数跟一个数,因此先求出第一个素数
    {
        for(i=2;i<a;i++)  //判断素数部分
        {
            if(a%i==0)  
                break;
        }
        if(i==a)  //若为素数,b为另一个数
            b=n-a;
            for(k=2;k<n;k++)  //将b分解为两个素数相加
            {
                for(i=2;i<k;i++)  //判断素数部分
                    if(k%i==0)
                    break;
                if(i==k)  //若k为素数,则b分解为h和k
                h=b-k;
                for(j=2;j<h;j++)  //判断h是否为素数
            {
                    if(h%j==0)
                    break;
            }
            if(j==h)  //若h为素数,跳出循环
            {
                break;
            }
            }
            if(n==a+k+h)  //若n分解为三个素数,则输出
            {
                    printf("%d=%d+%d+%d",n,a,k,h);
                    break;
            }
         }
}
void EvenDiv(int n)   //偶数函数
{
  int a,b,i,j;
    for(a=2;a<n;a++)   //判断小于n且从2开始的每个数是否为素数
    {                  //并保证从最小的素数开始
        for(i=2;i<a;i++)  //判断素数部分
            if(a%i==0)
            break;
        if(i==a)   //若为素数,则令b=n-a,并判断b是否为素数
            b=n-a;
        for(j=2;j<b;j++)  //判断素数部分
        {
            if(b%j==0)
                break;
        }
        if(j==b)  //若b为素数则输出
        {
            printf("%d=%d+%d",n,a,b);
          break;
        }
    }
}
int main()
{
  int n; 
  scanf("%d", &n);  //输入一个数判断他是奇数还是偶数并调用不同函数。
  (n % 2 == 0) ? EvenDiv(n) : OddDiv(n);
  return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值