NOI Online 2022 入门组 数学游戏 第二题题解
题意简述:#
令 ,给出 和 ,求出 。如果无解,输出 。
思路:#
这个 看着就很烦,我们想办法把它拆掉:
设 ,那么就可以设 。
而根据 的定义, 和 互质,那么 和 也互质。
这个时候,,
而 。
这样只要我们求出 ,就能求出 。
而根据上文推出的 和 互质,可以构造出:
。
这样,就求出了 ,进而就求出了 。
不要忘了无解情况!
首先要判断 是否是 的约数,如果不是的话显然无解。
另外,上文中 ,有可能会出现开方开不尽的情况。
这种情况要判断,如果 ,那么无解。
代码:#
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main () {
int T;
cin >> T;
while (T --) {
ll x, z;
cin >> x >> z;
ll d = sqrt (__gcd (x * x, z / x));//设d
ll y = z / x / d;//解出y
if (z % x || d * d != __gcd (x * x, z / x)) {//判断是否无解
puts ("-1");
}
else {
cout << y << endl;//输出答案
}
}
return 0;
}
标签:
比赛题解游记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效