HDU 5974 GCD数论

A Simple Math Problem

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 729    Accepted Submission(s): 177


Problem Description

Given two positive integers a and b,find suitable X and Y to meet the conditions:
X+Y=a
Least Common Multiple (X, Y) =b
 

 

Input
Input includes multiple sets of test data.Each test data occupies one line,including two positive integers a(1≤a≤2*10^4),b(1≤b≤10^9),and their meanings are shown in the description.Contains most of the 12W test cases.
 

 

Output
For each set of input data,output a line of two integers,representing X, Y.If you cannot find such X and Y,output one line of "No Solution"(without quotation).
 

 

Sample Input
6 8 798 10780
 

 

Sample Output
No Solution 308 490
 
题意:
求一组X,Y使得
X+Y==a
lcm(X,Y)== b
HIn:
 
 

 

所以就解方程。

#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL aa,bb,l;
LL gcd(LL a,LL b){return b==0?a:gcd(b,a%b);}
void solve(LL a,LL b,LL c){
    LL delta=b*b-4*a*c;
    if(delta<0){
        cout<<"No Solution"<<endl;
        return;
    }
    
    delta=sqrt(delta);

    LL i,j;
    i=(-1*b+delta)/2;
    j=-1*b-i;
    
    if(i>j) swap(i,j);
    
    if(i*l+j*l==aa&&i*j*l==bb)
         cout<<i*l<<' '<<j*l<<endl;
    else 
        cout<<"No Solution"<<endl;
}
int main(){
    while(scanf("%lld%lld",&aa,&bb)!=EOF){
        l=gcd(aa,bb);
        solve(1,-1*aa/l,bb/l);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/poler/p/7256277.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值