1.题目描述:点击打开链接
2.解题思路:本题通过观察发现,如果两个数a,b的最大公约数是G,那么G≤a且G≤b。因此直接令a=G即可。如何判断是否有解呢,只需要看是否满足gcd(G,L)==G就行了。如果满足,b=L。
3.代码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string> #include<sstream> #include<set> #include<vector> #include<stack> #include<map> #include<queue> #include<deque> #include<cstdlib> #include<cstdio> #include<cstring> #include<cmath> #include<ctime> #include<functional> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> P; typedef pair<long long, long long> PL; #define me(s) memset(s,0,sizeof(s)) #define For(i,n) for(int i=0;i<(n);i++) int gcd(int a,int b) { return b == 0 ? a : gcd(b, a%b); } int main() { //freopen("t.txt", "r", stdin); int g, l; int T; scanf("%d", &T); while (T--) { cin >> g >> l; int gg = gcd(g, l); if (gg == g) printf("%d %d\n", g, l); else puts("-1"); } return 0; }
时间: 2024-11-02 13:01:55