社区讨论
这个代码能拿60吗
P8255[NOI Online 2022 入门组] 数学游戏参与者 4已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @lo94mehe
- 此快照首次捕获于
- 2023/10/28 05:29 2 年前
- 此快照最后确认于
- 2023/10/28 05:29 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
int rd(){int Q;scanf("%lld",&Q);return Q;}
int t=rd(),gy;
int gcd(int x,int y){
return y?gcd(y,x%y):x;
}
priority_queue<int,vector<int>,greater<int> >q;//优先队列能自动排序
main(){
freopen("math.in","r",stdin);
freopen("math.out","w",stdout);
while(t--){
int x=rd(),y,z=rd(),flag=0;
if(z%x==0)gy=z/x;//gcd(x,y)*y
else {cout<<-1<<endl;continue;}//如果除不尽就-1
for(int i=1;i*i<=gy;i++){
if(gy%i==0)q.push(i);
if(i*i!=gy)q.push(gy/i);
}//加入因数
while(!q.empty()){
y=q.top();q.pop();//取出对头
if(z==x*y*gcd(x,y)){//原式
cout<<y<<endl;//输出
flag=1;
break;//退出循环
}
}if(flag==0)cout<<-1<<endl;
while(!q.empty())q.pop();//清空,重置
}
return 0;
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...