数字游戏(NOI Online 2022 普及组)

本文介绍了一个数字游戏的问题,Kri 面临找回被Zay擦除的数字y。根据x和z,需要找到最小的正整数y,使得z等于x、y和它们的最大公约数的乘积。文章详细解析了解题思路,通过转化等式,求解最大公约数d,进而求得y。代码实现中需注意检查变量的整数性质以避免无解情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

Kri 喜欢玩数字游戏。

一天,他在草稿纸上写下了 t 对正整数 (x,y),并对于每一对正整数计算出了 z=x×y×gcd(x,y)。

可是调皮的 Zay 找到了 Kri 的草稿纸,并把每一组的 y 都擦除了,还可能改动了一些 z。

现在 Kri 想请你帮忙还原每一组的 y,具体地,对于每一组中的 x 和 z,你需要输出最小的正整数 yy,使得 z=x×y×gcd(x,y)。如果这样的 y 不存在,也就是 Zay 一定改动了 z,那么请输出 -1。

注:gcd(x,y) 表示 x 和 y 的最大公约数,也就是最大的正整数 d,满足 d 既是 x 的约数,又是 y 的约数。

题解:

既然给出了Z和X,那么不妨把X除到左边去,原等式就变成了这样:

                                             \frac{Z}{X}=Y*GCD(X,Y)

观察这个式子,为了方面我们令GCD(X,Y)=d,因为d是X,Y的最大公约数,所以 d|X,d|Y,不妨设

                                                   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

感谢有你陪伴

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值