题目:
求一堆数里面公因数的数量。
题解:
先求出最大公因数,然后再查找。
代码:
#include<iostream>
#include<map>
using namespace std;
typedef long long ll;
ll n;
const int MAX = 400001;
ll a[MAX];
ll GCD(ll a, ll b) {
return a % b == 0 ? b : GCD(b, a % b);
}
int main()
{
cin >> n; for (int i = 0; i < n; i++) {
cin >> a[i];
}
ll x = 0, cnt = 0;
for (ll i = 0; i < n; i++) {
x = GCD(x, a[i]); //求最大公因数
}
for (ll i = 1; i * i <= x; i++) {
if (x % i == 0) {
cnt++;
if (i * i != x) { //一个数的因数至少有一般小于等于
//这个因数的开平方
cnt++;
}
}
}
cout << cnt;
return 0;
}