题目链接
蒜头君有一个集合 MM 是这样生成的:
(1) 已知 kk 是集合 MM 的元素;
(2) 如果 yy 是 MM 的元素,那么,2y+12y+1 和 3y+13y+1 都是 MM 的元素;
(3) 除了上述二种情况外,没有别的数能够成为 MM 的一个元素。
问题:给定 kk 和 xx(0 \le k \le x \le 10^50≤k≤x≤10
5
),请判断 xx 是否是 MM 的元素。
如果是,则输出"YES",否则,输出"NO"。
输入格式
输入整数 kk 和 xx,逗号间隔。
输出格式
如果是,则输出"YES",否则,输出"NO"。
输出时每行末尾的多余空格,不影响答案正确性
样例输入
0,22
样例输出
YES
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <cstring>
using namespace std;
int k,x;
bool judge(int n)
{
if(n>x)
return false;
if(n==x)
return true;
if(judge(2*n+1)||judge(3*n+1))
return true;
return false;
}
int main()
{
char c;
cin>>k>>c>>x;
int n=k;
bool f=judge(n);
if(f==true)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}