Hust oj 2118 Friend number(递推)

来源:互联网 发布:git mac客户端 编辑:程序博客网 时间:2024/04/30 17:04
Friend numberTime Limit: 1000 MSMemory Limit: 32768 KTotal Submit: 91(55 users)Total Accepted: 63(53 users)Rating: Special Judge: NoDescription

Friend number are defined recursively as follows.

(1) numbers 1 and 2 are friend number;

(2) if a and b are friend numbers, so is ab+a+b;

(3) only the numbers defined in (1) and (2) are friend number.

Now your task is to judge whether an integer is a friend number.


Input

There are multiple test cases. 

For each test case:

Line 1: A nonnegative integer a, 0<=a<=2^30.


Output

For each test case, output one line, if a is a friend number, output "YES!", otherwise output "NO!".

Sample Input
31312112131
Sample Output
YES!YES!NO!
设Friendnumber = a+b+ab+1-1,变形为(a+1)(b+1)-1,然后再用(c+1)(d+1)-1代替其中的a,以此类推,直到最后推到a=1,b=2,代入得2^x + 3^y - 1.
#include<cstdio>#include<iostream>#include<cstring>#include<cmath>using namespace std;int main(){    int n;    while(~scanf("%d",&n))    {        int flag = 0;        if(!n)        {            printf("NO!\n");            continue;        }        for(int i=0;i<=30;i++)        {            for(int j=0;j<=30;j++)            {                if(int(pow(2,i)) * int(pow(3,j)) - 1 == n)                {                    printf("YES!\n");                    flag = 1;                    break;                }            }            if(flag)                break;        }        if(!flag)            printf("NO!\n");    }}


0 0