现在给定一个正整数N,求N最少表示成多少个素数的和

//思路:

    // 例子:

    // 对于偶数:

        // 特例: 2  最少1个  2=2

        // 其他偶数:  (最少都为两个)  

            //       4  -->  最少两个   4=2+2    

            //       46 -->  最少两个   46=3+43  

    // 对于奇数:

        // 当奇数为素数时:(最少一个)

            //       23 -->  最少一个   23=23

        // 当奇数不为素数时:

            //本身-2后的数为素数 (两个)

                //如: 9 --》最少两个 9=2+7

            //本身-2后的数不为素数 (三个)

                //如: 27 --》最少三个 27=5+3+19    (你无法让它等于两个素数之和)

    // 故而一个整数的 最少素数和 有1个或2个或3个   (至于有没有其他的我无法证明)

#include<stdio.h>

//判断是否为素数

int sushu(int num){

    int flag=0;//0为素数,1不为素数

    for(int i=2;i<num;i++){

        if(num%i==0){

            //能除尽

            flag=1;

        }

    }

    return flag;

}

int countSum(int num){

    //对于2:

    if(num==2){

        return 1;

    }

    //对于除了2的偶数:

    if(num!=2&&num%2==0){

        return 2;

    }

    //对于奇数

    //为素数时

    if(sushu(num)==0){

        return 1;

    }

    //不为素数时

    if(sushu(num)==1){

        //判断该素数减去2为什么数

        if(sushu(num-2)==0){

            //为素数

            return 2;

        }else{

            //不为素数 如:27-2后为25

            return 3;

        }

    }

}

int main(){

    int num,count;

    scanf("%d",&num);

    //判断该数最少有几个素数的和构成

    count=countSum(num);

    printf("%d",count);

}  

           

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值