zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    OutputCache详解
    C#数值类型的转换
    C#变量类型转换
    C#和.net
    数组
    mvc
    C#部分基础知识
    项目开发-->高级功能汇总
    项目开发-->基础功能汇总
    C#基础篇
  • 原文地址:https://www.cnblogs.com/poler/p/7256277.html
Copyright © 2011-2022 走看看