专栏文章

数学游戏

P8255题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minm4zqs
此快照首次捕获于
2025/12/02 04:39
3 个月前
此快照最后确认于
2025/12/02 04:39
3 个月前
查看原文

计算过程

x×y×gcd(x,y)=zx \times y \times \gcd (x,y) = z
不妨令 x=a×q,y=a×p,gcd(p,q)=1x = a \times q,y = a \times p, \gcd (p,q) = 1
原式 =a3×p×q=z= a ^ 3 \times p \times q = z
注意到 y=a2×pa=z÷xay = a^2 \times \frac p a = \frac {z \div x} a
又注意到 gcd(zx,x2)=gcd(a2×p,a2×q2)\gcd (\frac z x,x ^ 2) = \gcd (a^2 \times p,a^2 \times q ^ 2)
因为 gcd(p,q)=1\gcd (p,q) = 1
所以 gcd(a2×p,a2×q2)=a2\gcd (a^2 \times p,a^2 \times q ^ 2) = a ^ 2
所以 y=(z/x)/a=(z/x)/sqrt(gcd(z/x,x2))y = (z / x) / a = (z / x) / sqrt( \gcd (z / x,x ^ 2))
zmodx0z \bmod x \ne 0, gcd(zx,x2)\gcd (\frac z x,x ^ 2) 不为完全平方数时不成立

Code

CPP
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
int t,x,z;
signed main()
{
	scanf("%lld",&t);
	while(t--)
	{
		scanf("%lld%lld",&x,&z);
		if(z % x != 0)cout << -1;
		else
		{
			int t = z / x;
			int a = sqrt(__gcd(t,x * x));
			if(a * a != __gcd(t,x * x))
			{
				puts("-1");
				continue;
			}
			cout << t/a;
		}
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...