题解:CF2114F Small Operations
题目描述
给你两个正整数
- 选择一个满足
1 \le a \le k 的正整数a ,使x 变为x\cdot a ; - 选择一个满足
1 \le a \le k 的正整数a ,使x 变为\frac{x}{a} ,要求操作完后x 值是整数。
你需要找出使
Sol
考虑先将
先将
设
其中
Code
#include<bits/stdc++.h>
using namespace std;
int dp[1000005];
bool check(int x,int k){
for (int i=2;i*i<=x&&i<=k;i++) while (x%i==0) x/=i;
return (x<=k);
}
int dfs(int x,int k){
if(x==1) return 0;
if(dp[x]) return dp[x];
if(x<=k){
dp[x]=1;
return 1;
}
dp[x]=1e9;
for(int i=k;i>1;i--) if(x%i==0) dp[x]=min(dp[x],dfs(x/i,k)+1);
return dp[x];
}
int main(){
int T;
cin>>T;
while(T--){
memset(dp,0,sizeof dp);
int a,b,k,ans=0;
cin>>a>>b>>k;
int fk=__gcd(a,b);
a=a/fk,b=b/fk;
if(!check(a,k) || !check(b,k)){
cout<<-1<<endl;
continue;
}
cout<<dfs(a,k)+dfs(b,k)<<endl;
}
}