http://noi.openjudge.cn/ch0113/41/
根据题意,可以知道既然k是属于M了,那么M中其他的元素应该比k都要大,因此可以通过递归来做。
递归出口是当x==k,说明找到对应的元素;
或者x-1不能被2或3整除,说明没有对应的元素;
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int k, x;
bool dfs(int n) {
if (n == k) {
return true;
}
n--;
if (n % 6 == 0) {
return dfs(n/3) || dfs(n / 2);
}
if (n % 2 == 0) {
return dfs(n / 2);
}
if (n % 3 == 0) {
return dfs(n / 3);
}
return false;
}
int main() {
scanf("%d,%d", &k, &x);
if (dfs(x)) {
printf("YES");
}
else {
printf("NO");
}
return 0;
}