刀工对决
题目链接
思路
a和b写成分解质因数形式
如果a和b把3和5质因子全部去除后剩下的不一样,那么不能变成相等。顺便统计3和5质因子数量。
操作一转化:质因子3指数-1
操作二转化:质因子3指数+1,质因子5指数-1
显然的:要先把质因子5变成相等,然后用操作一对质因子3进行调节
代码
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
scanf("%d",&n);
int ans=0;
bool flag=1;
while(n--)
{
int a,b;
scanf("%d%d",&a,&b);
int ta=a,tb=b;
int ca3=0,ca5=0,cb3=0,cb5=0;
while(ta%3==0){ta/=3;ca3++;}
while(ta%5==0){ta/=5;ca5++;}
while(tb%3==0){tb/=3;cb3++;}
while(tb%5==0){tb/=5;cb5++;}
if(ta!=tb)
{
flag=0;
puts("-1");
break;
}
else
{
if(ca5<cb5)
{
cb3+=cb5-ca5;
ans+=cb5-ca5;
}
else
{
ca3+=ca5-cb5;
ans+=ca5-cb5;
}
ans+=abs(ca3-cb3);
}
}
if(flag)printf("%d\n",ans);
return 0;
}
小结
碰到除法式子脑子里先想想分解质因数,然后除去的意义就是相应质因子数量的减少,乘法反之。