zoukankan      html  css  js  c++  java
  • 【codevs1012】最大公约数和最小公倍数

    题目描述 Description

    输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数

    条件:  1.P,Q是正整数

    2.要求P,Q以x0为最大公约数,以y0为最小公倍数.

    试求:满足条件的所有可能的两个正整数的个数.

    输入描述 Input Description

    二个正整数x0,y0

    输出描述 Output Description

    满足条件的所有可能的两个正整数的个数

    样例输入 Sample Input

    3 60

    样例输出 Sample Output

    4

    分析:

    p和q的最大公约数(gcd)是x,最小公倍数(lcm)是y

    那么p*q=x*y

    设p=x*i,q=x*j,i和j互质

    则p*q=(x*i)*(x*j)=x*y,那就有i*j=y/x

    我们可以枚举i,从i=1开始,直到i*i>y/x

    如果i是y/x的因子

    然后j=(y/x)/i

    再判断i和j是否互质

    因为每次得到的两个数中比较小的就是i,比较大的数是j,i是小于根号(y/x)的,j就是大于根号(y/x)因此不会重复计算,那算到一次,答案就累加2。

    代码:

    #include<iostream>
    using namespace std;
    
    int gcd(int x,int y)
    {
        return(x%y==0?y:gcd(y,x%y));
    }
    int main()
    {
        int x,y,ans=0;
        cin>>x>>y;
        if(y%x){
            cout<<0;
            return 0;
        }
        y=y/x;
        for(int i=1; i*i<=y; i++)
        {
            if(y%i==0&&gcd(i,y/i)==1)
                ans+=2;
        }
        cout<<ans<<endl;
    }

      

  • 相关阅读:
    POJ 2955
    POJ 1276 多重背包
    UVA 11584 划分回文字串
    Uva 11400 照明系统
    POJ 2677 Tour
    Uva 437 巴比伦塔 && UVA10003
    12563 Jin Ge Jin Qu hao
    最小公共祖先 (Tarjan) POJ1470
    DB2
    SQLserver数据库
  • 原文地址:https://www.cnblogs.com/flipped/p/4998976.html
Copyright © 2011-2022 走看看