题意:1,2是friend数,如果a,b是friend数,那么a*b+a+b也是friend数,给你一个数,问你是不是friend数。
想法:设X=a*b+a+b,则X+1=(a+1)*(b+1),其中a和b是friend数,那么可得X+1=((a‘+1)*(b’+1)-1+1)*((a‘’+1)*(b’‘+1)-1+1)…………那么最后就变成X+1=(a’+1)*(a‘’+1)*(a‘’‘+1)*…………*(b’+1)*(b‘’+1)*(b‘’‘+1)…………
最终a的集合和b的集合中的数会变成最小值,也就是1和2,那么问题就转化为:X+1=2^x*3^y。
#include<stdio.h>
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n==0)
{
printf("NO!\n");
continue;
}
n++;
while(n%2==0||n%3==0)
{
if(n%2==0) n/=2;
else if(n%3==0) n/=3;
}
if(n==1) printf("YES!\n");
else printf("NO!\n");
}
return 0;
}