zoukankan      html  css  js  c++  java
  • 洛谷P1029 最大公约数和最小公倍数问题

    题目描述

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

    条件:

    1.P,Q是正整数

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

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

    输入输出格式

    输入格式:

    二个正整数x0,y0

    输出格式:

    一个数,表示求出满足条件的P,Q的个数

    输入输出样例

    输入样例#1:
    3 60
    
    输出样例#1:
    4
    

    说明

    P,Q有4种

    3 60 15 12 12 15 60 3

    分析:暴力可以过,但是也可以用数学方法,利用唯一分解定律,最大公约数的次数都是取min,最小公倍数的次数都是取max,如果次数不同,证明这一位的贡献值是2,两个数一个取max,一个取min,就好了,如果次数相等,就没有贡献。在处理前先判断一下最大公约数能不能整除最小公倍数.

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <cmath>
    
    using namespace std;
    
    int x,y,cnt;
    
    int qpow(int a,int b)
    {
        int ans = 1;
        while (b)
        {
            if (b & 1)
            ans *= a;
            a *= a;
            b >>= 1;
        }
        return ans;
    }
    
    int main()
    {
        scanf("%d%d",&x,&y);
        if (y % x != 0)
        printf("0
    ");
        else
        {
        int k = y / x;
        for (int i = 2; i <= k; i++)
        {
            if (k % i == 0)
            {
                while (k % i == 0)
                k /= i;
                cnt++;
            }
        }
        printf("%d
    ",qpow(2,cnt));
    }
        
        return 0;
    }
  • 相关阅读:
    Python 环境安装教程(Windows 10)
    去掉页面状态栏的方法
    iOS开发init方法解析
    xCode删除storyboard,新建window并启动
    应用程序代理AppDelegate解析
    nib文件的注册及加载
    cocospods的安装与应用
    Objective-C 理解之方括号[ ]的使用
    36辆自动赛车和6条跑道的问题
    编程珠玑第二章
  • 原文地址:https://www.cnblogs.com/zbtrs/p/7495886.html
Copyright © 2011-2022 走看看