打表发现,其中一组答案应该接近n / 2且它两互质,因此对于每组答案,我们枚举a从n / 2到1,此时b = n - a,只要a和b互质,那么输出即可
#include <iostream>
#include <vector>
#include <numeric>
using i64 = long long;
void solve(){
i64 n;
std::cin >> n;
for(i64 a = n / 2; a >= 1; a--){
i64 b = n - a;
if(std::gcd(a, b) == 1){
std::cout << a << " " << b << "\n";
break;
}
}
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
// 打表
// for(int n = 2; n <= 100; n++){
// int max = -1E9, a = -1, b = -1;
// for(int ai = n / 2; ai >= 1; ai--){
// int bi = n - ai;
// int lcm = std::lcm(ai, bi);
// if(lcm > max){
// max = lcm;
// a = ai;
// b = bi;
// }
// }
// std::cout << "n: " << n << "\n";
// std::cout << "max, a, b: " << max << " " << a << " " << b << "\n";
// }
int T = 1;
std::cin >> T;
for(int Ti = 0; Ti < T; Ti++){
solve();
}
return 0;
}

京公网安备 11010502036488号