问题 E: Disjoint Set of Common Divisors
时间限制: 1 Sec 内存限制: 128 MB
题目描述
Given are positive integers A and B.
Let us choose some number of positive common divisors of A and B.
Here, any two of the chosen divisors must be coprime.
At most, how many divisors can we choose?
→Definition of common divisor
·An integer d is said to be a common divisor of integers x and y when d divides both x and y.
→Definition of being coprime
·Integers x and y are said to be coprime when x and y have no positive common divisors other than 1.
→Definition of dividing
·An integer x is said to divide another integer y when there exists an integer α such that y=αx.
Constraints
·All values in input are integers.
·1≤A,B≤1012
输入
Input is given from Standard Input in the following format:
A B
输出
Print the maximum number of divisors that can be chosen to satisfy the condition.
样例输入 Copy
【样例1】
12 18
【样例2】
420 660
【样例3】
1 2019
样例输出 Copy
【样例1】
3
【样例2】
4
【样例3】
1
提示
样例1解释
12 and 18 have the following positive common divisors: 1, 2, 3, and 6.
1 and 2 are coprime, 2 and 3 are coprime, and 3 and 1 are coprime, so we can choose 1, 2, and 3, which achieve the maximum result.
样例3解释
1 and 2019 have no positive common divisors other than 1.
思路:
对(gcd(x,y))质因子分解,答案为质因子个数(+1)
代码:
ll divide(ll x){
ll res=0;
for(ll i=2;i<=x/i;i++)
if(x%i==0){
ll s=0;
while(x%i==0) x/=i,s++;
res++;
}
if(x>1) res++;
return res;
}
int main()
{
ll x=read,y=read;
ll t=__gcd(x,y);
cout<<divide(t)+1<<endl;
return 0;
}