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;
}

Powered by Jekyll and Theme by solid