复旦附中T517829 GCD变换

原题链接:T517829 GCD变换
这道题很唐氏,但是我不会(
cjy1024的指点下,这道题我会了。
结论:每一次让 \(x=x\cdot \gcd\{x,\frac{m}{x}\}\)
我们为了让他们尽量次数少,所以我们希望乘上 \(\frac{m}{x}\),但如果 gcd 不满足的话,那么我们就乘上 \(\frac{m}{x}\) 的因数即可。
误解情况即为 \(x\neq m\) 并且 \(\gcd\{x,\frac{m}{x}\}=1\)

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n,m,cnt;
signed main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>m;cnt=0;
		while(n<m)
		{
			cnt++;
			if(__gcd(n,m/n)==1&&n!=m){cnt=-1;break;}
			n*=__gcd(n,m/n);
		}
		cout<<cnt<<endl;
	}
	return 0;
}

真不好评价如此简单的猜结论题。

posted @ 2025-01-11 10:41  I_AK_CTSC  阅读(21)  评论(0)    收藏  举报