最大公约数和最小公倍数问题
输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数
条件:
1.P,A是正整数
2.要求P,Q以x0为最大公约数,以y0为最小公倍数.
试求:满足条件的所有可能的两个正整数的个数.
条件:
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种.
输出: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; }