题目描述
Phenix有一个正整数N,他想知道正整数N是否可以写成a * b + a + b的形式(其中a > 0,b > 0)
例如3 = 1 ∗ 1 + 1 + 1,如果可以请输出"Yes",否则输出"No"
输入描述:
一个正整数N(0<N<2×109)
输出描述:
“Yes”或者“No“
样例
示例1:
输入
2
输出
No
示例2:
输入
8
输出
Yes
【题解】
N可以写成a * b + a + b的形式时:
N = a*b+a+b -> N = (a+1)*(b+1)-1 -> N+1 = (a+1)*(b+1)
所以判断 N+1 是否是合数即可判断 N 是否可以写成 a * b + a + b
【代码实现】
#include <iostream>
#include <math.h>
#define ll long long
using namespace std;
int main() {
ll n;
cin>>n;
n+=1;
//判断素数
int flag=1;
if (n%2==0&&n!=2) flag=0;
else {
for (int i=3;i<=sqrt(n);i+=2) {
if (n%i==0) {
flag=0;
break;
}
}
}
if (flag) cout<<"No";
else cout<<"Yes";
return 0;
}