最大公约数和最小公倍数问题

输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数
条件:
1.P,A是正整数
2.要求P,Q以x0为最大公约数,以y0为最小公倍数.
试求:满足条件的所有可能的两个正整数的个数.
输入
两个正整数
输出
满足条件的所有可能的两个正整数的个数
样例输入
3 60
样例输出
4
提示
输入:x0=3   yo=60
输出:4
说明(不用输出)此时的P  Q分别为:
3 60
15 12
12 15
60 3
所以:满足条件的所有可能的两个正整数的个数共4种.
解题过程:
 
这个题的指导做法是暴力枚举(确实)
但我不喜欢(也确实)
数论做法:
每一个指数不为零的质数
都只能属于一个数,设其为n
那么就一共有2^n种可能
但是一定要注意!!!如果n==0,可能数为零
#include<bits/stdc++.h>
using namespace std;
long long a,b,c;
long long i=1,j=2,k,w=0,n=0;
int main()
{
    cin>>a>>b;
    if(b%a!=0) 
    {
        cout<<"0"<<endl;
        return 0;
    }
    c=b/a;
    while(c>1)
    {
        while(c%j==0)
        {
//            cout<<c<<endl;
            if(n!=j)
                w++;
            c=c/j;
            n=j;
        }
        j++;
    }
    for(k=1;k<=w;k++)
        i=i*2;
//        cout<<i<<endl;
    if(i==1)
        cout<<"0"<<endl;
    else 
        cout<<i<<endl;
    return 0;
}

 

posted @ 2022-08-21 20:56  董苏铭  阅读(47)  评论(0)    收藏  举报