题意:
1).1和2是朋友数。
2).如果a和b是朋友数,那么a+b+ab也是朋友数。
3).当且仅当满足(1)或(2)的情形才能判定X是朋友数。(0<=X<=2^30)
题解:
观察任意x+1=c+d+cd+1=(c+1)*(d+1)
原始的朋友数只有1,2;c+1,d+1一定为2或3的倍数
#include<stdio.h> int main() { int n; while(scanf("%d",&n)!=EOF) { if(n==0) { printf("NO!\n"); continue; } n++; while(n%3==0) n/=3; while(n%2==0) n/=2; if(n==1) printf("YES!\n"); else printf("NO!\n"); } return 0; }