列表

详情


NC54563. 不定方程

描述

对于正整数a,b,我们有不定方程ax=by,其中x,y也是正整数。令c=ax=by,我们设为该不定方程所有可能的的解中最小的一个。
给定a,b后求解是一项简单的工作。现在我们把问题变得稍微复杂一些,我们给出x,y,你需要判断它们是否满足一组,其中为该不定方程所有可能的的解中最小的一个。

输入描述

第一行一个整数,表示数据的组数。
接下来一共T行,第行表示第i组数据。每一行两个整数。x,y的含义如题目描述所示。

输出描述

输出T行,第i行对应输入的第i组数据。
如果满足,输出三个整数,每个数之间存在空格。如果不满足则输出-1。
如果答案有多个,你可以输出其中任意一个,不能超过

示例1

输入:

1
3 5

输出:

5 3 15

说明:

5*3=3*5=15,可以证明如果a=5,b=3,那么对于ax=by=c,15是c可能的最小的取值。
如果你输出10 6 30,那么这同样是一个正确的答案。因为有10*3=6*5=30,且同样30是可能的最小的取值。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 384K, 提交时间: 2022-10-29 10:15:10

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;cin>>t;
    while(t--){
    long long int a,b,c,x,y;
    cin>>x>>y;
    if(gcd(x,y)!=1) cout<<-1<<endl;
    else cout<<y<<' '<<x<<' '<<x*y<<endl;
    }
    return 0;
}

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 344K, 提交时间: 2019-12-01 22:32:11

#include<bits/stdc++.h>
using namespace std;
int main(){
    int T;
    long long x,y;
    cin>>T;
    while(T--){
        cin>>x>>y;
        if(__gcd(x,y)!=1) cout<<-1<<endl;
      else cout<<y<<" "<<x<<" "<<x*y<<endl;
    }
}

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 364K, 提交时间: 2019-12-04 19:10:13

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int t;
	cin>>t;
	while(t--){
		long long x,y;
		cin>>x>>y;
		if(__gcd(x,y)!=1){
			cout<<"-1"<<endl;
		}else{
			cout<<y<<" "<<x<<" "<<x*y<<endl;
		}
	}
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 25ms, 内存消耗: 3424K, 提交时间: 2019-12-01 14:18:45

from math import gcd
T = int(input())
for cas in range(T):
  x, y = map(int, input().split())
  if gcd(x, y) != 1:
    print(-1)
    continue
  print(y, x, x * y)

上一题