这是个数论题,题目给出两个正整数a,b; 让我们寻找两个正整数x,y,其满足x+y=a,lcm(x,y)=b; 这个题可以用解方程做; 因为xy=lcm(x,y)gcd(x,y);lcm(x,y)=b;gcd(x,y)=gcd(a,b); 所以xy=bgcd(a,b); (z-x)(z-y)=zz-(x+y)z+xy; △t△t=(x+y)^2-4xy; z1=((x+y)+△t)2 , z2=((x+y)-△t)2 ; 显然当△t0方程无解,△t不是整数时,x,y也不是整数,所以这;两种时输出no sol tion; 其他情况直接输出z1,z2; 还有因为 integers a(1≤a≤2*104),b(1≤b≤109),所以变量 a,b,x,y,t 要用long long声明; #incl destdio.h #incl demath.h int gcd(int a,int b) { ret rn b==0? a:gcd(b,a%b); } int main { long long a,b,x,y,t; while(~scanf("%lld%lld",&a,&b)) { b=gcd(a,b)*b; if(a*a-4*b0) { printf("no sol tionn"); } else { t=sqrt(a*a-4*b); x=(a+t)2; y=x-t; if(t*t==a*a-4*b) { printf("%lld %lldn",y,x); contin e; } else { printf("no sol tionn");