Luogu P8255 数学游戏 题解
Luogu P8255 数学游戏 题解
题目大意
现有若干正整数 满足 ,给定 ,求 。无解输出
I/O
Input
第一行一个整数,表示有 对正整数
接下来 行,每行两个正整数
Output
对于每对数字输出一行 ,无解输出
I/O e.g.
Input#1
1
10 240
Output#1
12
Input#2
3
5 30
4 8
11 11
Output#2
6
-1
1
题解
Code
#include<bits/stdc++.h>
using namespace std;
#define GO(u,v,i) for(register int i=u;i<=v;i++)
template<class t>inline t fr(){
register t num=0,dis=1;
register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')dis=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){num=(num<<1)+(num<<3)+(ch^48);ch=getchar();}
return num*dis;
}
template<class t>inline void fw(t num){
if(num>9)fw(num/10);
putchar(num%10+'0');
}
template<class t>inline void fw(t num,char ch){
if(num<0)num=-num,putchar('-');
fw(num);putchar(ch);
}
typedef long long lld;
template<class t>inline t gcd(t a,t b){return b==0?a:gcd(b,a%b);}
lld x,z;
lld t;
inline bool check(lld num){
lld ans=(int)sqrt(num);
return num==ans*ans;
}
signed main(){
t=fr<lld>();
GO(1,t,i){
x=fr<lld>(),z=fr<lld>();
if(z%x){
fw(-1,'\n');continue;
}
z/=x;
lld cc=gcd(x*x,z);
if(check(cc)){
lld ans=z/(int)sqrt(cc);
fw(ans,'\n');
}
else fw(-1,'\n');
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】