要求最大的lcm,根据公式,lcm=a*b/gcd(a,b)
那么我们得想办法让a*b尽可能大,因为b=n-a,所以根据一元二次方程最大值为a=n/2时
gcd最小为1,只有当a与b除了1以外没有任何公因数时出现
所以我们就可以从n/2开始遍历,每一次都求gcd,如果gcd=1,那么就是最大值
这里需要注意的是i>=1,而不是i>=2,因为有的值,只有当i==1时,才能取公共值
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int t=scanner.nextInt();
while(t-->0) {
long a=0;
long b=0;
BigInteger max=BigInteger.ZERO;
long n=scanner.nextLong();
for (long i = n/2; i >=1; i--) {
if(gcd(i, n-i)==1) {
a=i;
b=n-i;
break;
}
}
System.out.println(a+" "+b);
}
}
public static long gcd(long a,long b) {
BigInteger aBigInteger=new BigInteger(""+a);
BigInteger bBigInteger=new BigInteger(""+b);
BigInteger gcd=aBigInteger.gcd(bBigInteger);
return Long.parseLong(gcd.toString());
}
}



京公网安备 11010502036488号