CF371B

这题十分简单,化简一下题意为:一次操作定义为对一个数乘 \(\frac{1}{2}\)\(\frac{1}{3}\)\(\frac{1}{5}\),求使用最少的操作次数,使得两个数 \(a\)\(b\) 相等。

不难发现,每一次都是倍数变换,所以最终的 \(a\)\(b\)\(\gcd(a,b)\)
当然,由于题目的限制(即指定的数),所以我们要分别对
\(\dfrac{a}{\gcd(a,b)}\)\(\dfrac{b}{\gcd(a,b)}\) 进行质因数分解(即变换过程),检验这两个数是否只由 \(2\)\(3\)\(5\) 构成,并在分解过程中统计质因数的个数。

代码实现十分简单,详细见下:

#include <iostream>
#include <cstdio>
using namespace std;
int ans;
int gcd(int x,int y)
{
	if(y==0) return x;
	return gcd(y,x%y);
}
bool fj(int x)
{
	int y=x;
	for(int i=2;i<=5;i++)
		while(y%i==0)
			y/=i,ans++;
	if(y>1) return false;
	return true;
}
int main()
{
	int a,b;
	cin>>a>>b;
	int c=gcd(a,b);
	a/=c;
	b/=c;
	if(fj(a)&&fj(b)) cout<<ans;
	else cout<<-1;
	return 0;
}
posted @ 2024-01-20 17:35  liyilang2021  阅读(2)  评论(0编辑  收藏  举报