南邮NOJ上机系统#PROB1012最小质数合数之和问题

该文章是一个关于编程的问题,要求编写C++代码来找出大于给定正整数n的最小质数和最小合数的和。当n等于1时,最小质数是2,最小合数是4;否则,通过判断n+1是否为质数来确定最小合数,然后找到相邻的质数。最后输出这两个数的和。
摘要由CSDN通过智能技术生成

最小质数合数之和问题

描述:
查找大于正整数n的最小质数和最小合数之和。

质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

合数是指在大于1的整数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。

输入:
一个正整数 n n n,题目保证 1 ≤ n ≤ 1000000000 1≤n≤1000000000 1n1000000000

输出:
一个正整数,表示大于正整数n的最小质数和最小合数之和。

样例输入:
1
样例输出:
6
样例输入:
96
样例输出:
195
注释:
对于第一组样例:n为1的情况下,最小素数为2,最小合数为4,因此答案为2+4=6。

C++实现代码

#include<iostream>
#include<cmath>

using namespace std;

bool zhishu(int x);

int main(){
    int n,zhi,he;
    cin>>n;
    zhi=n;
    he=n;
    if(n==1){
        zhi=2;
        he=4;
    }
    else if(n%2==1){
        he=n+1;    //n是奇数时,最小和数必是n+1
        zhi=n+2;
        while(!zhishu(zhi))
            zhi++;
    }
    else{
        if(!zhishu(n+1)){
            he=n+1;    //n是偶数时,判断n+1是否为质数
            zhi=n+2;
            while(!zhishu(zhi))
                zhi++;
        }
        else{
            zhi=n+1;    //若n+1不是和数,则n+2必为和数
            he=n+2;
        }
    }
    n=zhi+he;
    cout<<n;
}

bool zhishu(int x){
    int n=sqrt(x);
    for(int i=2;i<=n;i++)
        if(x%i==0)
            return 0;
    return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值