题目描述
同学们都进入了教室后,李老师上起了数论课。
给你两个正整数 A AA 和 B BB,从中选择一些 A AA 、 B BB 的公共因数,并且要保证选取的这些因数是互质的。
请问最多选择多少个公共因数。
输入
A B
第一行空格隔开的两个正整数 A AA 和 B BB
数据范围:
1 ≤ A , B ≤
输出
输出一行一个正整数,代表最多选择的互质的公共因数的个数
样例输入
12 18
样例输出
3
思路
本题就是求两个数公共质因子的个数再加上1,因为1一定是存在
Code
//求公共质因子的个数+1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map<ll,ll>aa,bb;
int main(){
ll a,b;
cin>>a>>b;
set<ll>s1,s2;
int n=max(sqrt(a),sqrt(b));
for(int i=2;i<=(ll)n;i++){
while(a%i==0){
s1.insert(i);
a/=i;
aa[i]=1;
}
while(b%i==0){
s2.insert(i);
b/=i;
bb[i]=1;
}
}
if(a!=1){
s1.insert(a);
aa[a]=1;
}
if(b!=1){
s2.insert(b);
bb[b]=1;
}
ll ans=1;
for(auto i:s1){
//cout<<i<<endl;
if(bb[i]){
ans++;
}
}
// cout<<endl;
// for(auto i:s2){
// cout<<i<<endl;
// }
cout<<ans<<endl;
}