SP4195 MSE08H - GCD Determinant 题解
题意:
给定 $n$ 个数 $x_1,x_2,\cdots,x_n$ ,求
$1 \le n \le 10^3,~x_i \le 2\times 10^9$ 。
根据 Smith’s determinant(GCD矩阵的行列式) 我们推导出了
本题中把矩阵变成了 $A=[a_{i,j}],~a_{i,j}=\gcd(x_i,x_j)$ ,其实是一样的
我们只需要在证明中更改矩阵 $B$ 即可
即可得到
时间复杂度 $\mathcal{O}(qn \log V)$
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
void up(int &x,int y) { x < y ? x = y : 0; }
void down(int &x,int y) { x > y ? x = y : 0; }
#define N ((int)(1e3 + 15))
int phi(int n)
{
int ans = n;
for(int i = 2; i * i <= n; i++)
if(n % i == 0)
{
ans = ans / i * (i - 1);
while(n % i == 0) n /= i;
}
if(n > 1) ans = ans / n * (n - 1);
return ans;
}
int n, r;
const int mod = 1e9 + 7;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
// freopen("check.in","r",stdin);
// freopen("check.out","w",stdout);
while(cin >> n)
{
r = 1;
for(int i = 1, x; i <= n; i++) {
cin >> x, r = r * phi(x) % mod;
}
cout << r << '\n';
}
return 0;
}