题解 | 最大公约数和最小-NOIP2001普及组复赛B题

B-最大公约数和最小公倍数问题_NOIP2001普及组复赛

https://ac.nowcoder.com/acm/contest/229/B

题目描述

输入二个正整数,求出满足下列条件的P,Q的个数
条件:  1.P,A是正整数
2.要求P,Q以x0为最大公约数,以y0为最小公倍数.
试求:满足条件的所有可能的两个正整数的个数.

输入描述:

2个正整数

输出描述:

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

示例1

输入
3 60
输出
4

解答

首先当然是分解质因数了——
map<int,int>xys,yys;//<底数,指数>
for(int i=2;i<=sqrt(x);i++){
    while(x%i==0){
        x/=i;
        xys[i]++;
    }
}
if(x!=1)xys[x]++;
for(int i=2;i<=sqrt(y);i++){
    while(y%i==0){
        y/=i;
        yys[i]++;
    }
}
if(y!=1)yys[y]++;

下面开始看质因数了

要是的某个因数的指数比的还大,肯定不可能,直接为0;

要是的某个因数的指数比的小,代表两个数这个因数指数分别为的这个因数的指数和的这个因数的指数——这个因数的指数有两种情况;

要是的某个因数的指数与的相等,代表两个数这个因数指数均为的这个因数的指数,一种情况。

以样例为例:

3:

底数 指数
3 1

60:

底数 指数
2 1
3 1
5 1

底数为2,1>0,答案(乘法原理)

底数为3,1=1,答案不变

底数为5,1>0,答案

答案为4

但是!假如有y0指数为0但x0指数非零的数,会判断漏!!!例如:3 5

于是我一开始就
if(y%x){
    cout<<0;
    return 0;
}
下面是完整源码:
#include<bits/stdc++.h>
using namespace std;
int main(){
    int x,y,ans=1;
    cin>>x>>y;
    if(y%x){//最大公约数一定是最小公倍数的约数
        cout<<0;
        return 0;
    }
    map<int,int>xys,yys;//<底数,指数>
    //分解x0
    for(int i=2;i<=sqrt(x);i++){
        while(x%i==0){
            x/=i;
            xys[i]++;
        }
    }
    if(x!=1)xys[x]++;
    //分解y0
    for(int i=2;i<=sqrt(y);i++){
        while(y%i==0){
            y/=i;
            yys[i]++;
        }
    }
    if(y!=1)yys[y]++;
    for(map<int,int>::iterator i=yys.begin();i!=yys.end();++i){
        if(xys[i->first]>i->second)ans=0;//这句其实可以不要
        if(xys[i->first]<i->second)ans*=2;
    }
    cout<<ans;
    return 0;
}



来源:破壁人五号
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4249次浏览 75人参与
# AI面会问哪些问题? #
27474次浏览 550人参与
# 厦门银行科技岗值不值得投 #
7915次浏览 188人参与
# 你的实习产出是真实的还是包装的? #
20012次浏览 342人参与
# 找AI工作可以去哪些公司? #
8924次浏览 230人参与
# 春招至今,你的战绩如何? #
64347次浏览 575人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15051次浏览 221人参与
# 从事AI岗需要掌握哪些技术栈? #
8776次浏览 299人参与
# 你做过最难的笔试是哪家公司 #
33017次浏览 229人参与
# 中国电信笔试 #
31886次浏览 292人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340689次浏览 2173人参与
# 哪些公司真双非友好? #
69551次浏览 289人参与
# 阿里笔试 #
178341次浏览 1314人参与
# 机械人避雷的岗位/公司 #
62673次浏览 393人参与
# 第一份工作一定要去大厂吗 #
14380次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22046次浏览 280人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26220次浏览 310人参与
# 沪漂/北漂你觉得哪个更苦? #
9741次浏览 193人参与
# HR最不可信的一句话是__ #
6145次浏览 113人参与
# 应届生第一份工资要多少合适 #
20663次浏览 86人参与
# AI时代,哪个岗位还有“活路” #
11407次浏览 339人参与
# 春招你拿到offer了吗 #
831056次浏览 9986人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务