首页 > 其他分享 >CF371B

CF371B

时间:2024-01-20 17:47:52浏览次数:16  
标签:frac gcd CF371B int return fj include

这题十分简单,化简一下题意为:一次操作定义为对一个数乘 \(\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;
}

标签:frac,gcd,CF371B,int,return,fj,include
From: https://www.cnblogs.com/-lilong-/p/17976816

相关文章

  • CF371B 题解
    前言题目传送门!更好的阅读体验?这题显然没有蓝的难度。其他题解代码不好看,而且没有讲清楚,那我补一发吧。题目简述有两个数\(a\),\(b\),每次操作可以给\(a\)或\(b\)......