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;
    }

      

  • 相关阅读:
    Eclipse Kepler安装WST Server Adapter后创建Server无Tomcat解决方法
    centos下Linux C语言MD5的使用
    解析JSON字符串
    切换view的动画
    设置菜单和工具条
    视图切换的几种方法
    scrollview 例子2
    UIScrollView
    iOS:翻页效果
    软件预构的艺术源码编译
  • 原文地址:https://www.cnblogs.com/flipped/p/4998976.html
Copyright © 2011-2022 走看看