分析
题目中说有 $x+y=z$,其中有且仅有一个为好数,其他的为接近好数。
假设 $X$ 或 $Y$ 为好数
设一个好数为 $Z$,两个个接近好数分别为 $X$ 和 $Y$
$\because$ 一个好数可以被 $A \times B$ 整除
$\therefore$ $Z$ 可以表示为 $A \times B \times k_z$
$\because$ 一个接近好数可以被 $A$ 整除
$\therefore$ $X$ 可以表示为 $A \times k_x$
$Y$可以表示为 $A \times k_y$
$\because$ $X+Y=Z$
$\therefore$ $A \times k_x+A \times k_y=A \times B \times k_z$
$\therefore$ $B \times k_x+k_y=k_z$或$k_x+B \times k_y=k_z$
(跟 $A$ 没关系!!!)
又$\because$ 相邻的两个整数互质
$\because$相邻的两个整数互质
$\therefore$($B+1$)与 $B$ 互质
$\therefore$ $1+B=$($B+1$) 符合题意
注意:$B=1$时要返回NO!!!
因为 $1$ 可以被任何数整除,那所有的数都为好数,显然不符合题意。
代码
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int t;
scanf("%lld",&t);
while(t--){
long long a,b;
scanf("%lld %lld",&a,&b);
if(b==1){
printf("NO\n");
continue;
}else{
printf("YES\n");
printf("%lld %lld %lld\n",a,a*b,a*(b+1));
}
}
return 0;
}
- 记得开long long!!!