题意:
多组数据,每组数据给定两个数,问它们是否能够拆分成若干个1~100的因子且因子不能重复。若小数能拆分而大数不能则输出小数,否则输出较大数。
思路:
因子是1~100的数,可以对因子100进行dfs,终止条件是两个数都被正确拆分或者因子下降到1。
代码:
#include<iostream>
using namespace std;
bool flag1,flag2; //flag1:两个都合法 flag2:较小数合法
void dfs(int n,int m,int p){
if(flag1) return;
if(n==1&&m==1){
flag1=true;//flag2=true;
return ;
}
if(m==1) flag2=true;
if(p<2) return;
if(!m%p) dfs(n,m/p,p-1);
if(!n%p) dfs(n/p,m,p-1);
dfs(n,m,p-1);
}
int main(){
int a,b;
while(cin>>a>>b){
if(a<b) swap(a,b);
flag1=flag2=false;
dfs(a,b,100);
if(flag1||!flag2) cout<<a<<endl;
else cout<<b<<endl;
}
return 0;
}