最小质数合数之和问题
描述:
查找大于正整数n的最小质数和最小合数之和。
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
合数是指在大于1的整数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。
输入:
一个正整数
n
n
n,题目保证
1
≤
n
≤
1000000000
1≤n≤1000000000
1≤n≤1000000000。
输出:
一个正整数,表示大于正整数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;
}