https://www.hackerrank.com/challenges/between-two-sets/problem
#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b)
{
while(b > 0){
int temp = b;
b = a % b;
a = temp;
}
return a;
//while(a && b)
//{
// if(a >= b){
// a %= b;
// }else{
// b %= a;
// }
//}
//return a + b;//尴尬之超时
}
int lcm(int a, int b)
{
return (a / (gcd(a,b)) * b);
}
int main()
{
int n, m;
cin >> n >> m;
int A = 1;
int B = 0;
for(int i = 0; i < n; i++)//find the LCM of all the integers of array A.
{
int x;
cin >> x;
A = lcm(A, x);
}
for(int i = 0; i < m; i++)//find the GCD of all the integers of array B.
{
int x;
cin >> x;
B = gcd(B, x);
}
int ans = 0;
//Count the number of multiples of LCM that evenly divides the GCD.
for(int i = A, j = 2; i <= B; i = A * j, j++)//优雅优化而不是直接(int i = A; i <= B; i++)
{
if(B % i == 0)
{
ans++;
}
}
cout << ans << '\n';
}