HDU 1719 - Friend (推公式)
题意
满足$ab + a + b \text {a、b是friend number} $的数是friend number
给出一个数,问是不是。
思路
$F = ab + a + b = (a+1)(b+1) - 1$,我们把a用c和d换掉,b用e和f换掉
$F = (c+1)(d+1)(e+1)(f+1) - 1$
因为最后只能剩下1和2,所以$F = (1+1)^x * (2+1)^y - 1$
所以只要分解因数看是不是只有2和3即可。
代码
int main()
{
int T, n;
while (~scanf("%d", &n))
{
n++;
if (n == 1)
{
puts("NO!");
continue;
}
while (n % 2 == 0) n /= 2;
while (n % 3 == 0) n /= 3;
printf("%s\n", n == 1 ? "YES!" : "NO!");
}
return 0;
}