/*
分析:
恩,吧错吧错,推起来挺有意思的,简单数学,算是找规律吧。
1和2是源点,其它所有数都是由它俩推出来的,那么拆拆试试:
1、如果一个数n是friend number,那么n=ab+a+b=(a+1)(b+1)-1;
2、而a、b也是friend number,那么n=((c+1)(d+1))((e+1)(f+1))-1;
3、所以,推导最后,n必定等于(1+1)^x*(2+1)^y-1;
4、由于这个n最大才2^30,so~,应该怎么做,就不用再啰嗦了吧~
2012-12-19
*/
分析:
恩,吧错吧错,推起来挺有意思的,简单数学,算是找规律吧。
1和2是源点,其它所有数都是由它俩推出来的,那么拆拆试试:
1、如果一个数n是friend number,那么n=ab+a+b=(a+1)(b+1)-1;
2、而a、b也是friend number,那么n=((c+1)(d+1))((e+1)(f+1))-1;
3、所以,推导最后,n必定等于(1+1)^x*(2+1)^y-1;
4、由于这个n最大才2^30,so~,应该怎么做,就不用再啰嗦了吧~
2012-12-19
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int main()
{
int n;
while(scanf("%d",&n)!=-1)
{
if(n==0) {printf("NO!\n");continue;}
if(n==1 || n==2){printf("YES!\n");continue;}
n++;
while(!(n%2)) n/=2;
while(!(n%3)) n/=3;
if(n==1) printf("YES!\n");
else printf("NO!\n");
}
return 0;
}