两个数A,B能不能通过1-100内的数相乘得到,每个数只能用一次,并且两个数不能有除了1之外的公共因子.
3种情况:
1.k做A的因子.
2.k做B的因子.
3.k不做任何数的因子.
#include <cstdio>
#include <algorithm>
#include <memory.h>
using namespace std;
const int MAX = 102;
bool vis[MAX], madeit;
bool dfs(int a, int b, int k){
if(a == 1){
madeit = true;//smaller one has to reach 1 at least.
if(b == 1)return true;
}
if(k == 1)return false;
if(a % k == 0 && dfs(a / k, b, k - 1))return true;
if(b % k == 0 && dfs(a, b / k, k - 1))return true;
return dfs(a, b, k - 1);
}
int main(int argc, char const *argv[]){
int a, b;
while(scanf("%d%d", &a, &b) == 2){
memset(vis, false, sizeof(vis));
madeit = false;
if(a > b)swap(a, b);
if(!dfs(a, b, 100) && madeit){
printf("%d\n", a);
}else{
printf("%d\n", b);
}
}
return 0;
}