1 条题解
-
0
对于每个 从 到 ,计算其所有约数的乘积,然后将所有这些乘积相乘,最后对 取模。
每个数 作为约数出现的次数等于有多少个 是 的倍数,即 。
AC code:
#include <bits/stdc++.h> using namespace std; #define ll long long ll qpow(ll a, ll b, ll mod) { ll res = 1; while (b) { if (b & 1) res = res * a % mod; a = a * a % mod; b >>= 1; } return res; } int main() { ll p; cin >> p; ll m = p - 1; ll sqrtm = sqrt(m); ll ans = 1; for (ll k = 1; k <= sqrtm; k++) { ll dmax = m / k; ll dmin = m / (k + 1) + 1; if (dmin > dmax) continue; ll prod = 1; for (ll d = dmin; d <= dmax; d++) { prod = prod * d % p; } ans = ans * qpow(prod, k, p) % p; } for (ll d = 1; d <= sqrtm; d++) { ll k = m / d; if (k > sqrtm) { ans = ans * qpow(d, k, p) % p; } } cout << ans; return 0; }
- 1
信息
- ID
- 153
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 4
- 标签
- 递交数
- 3
- 已通过
- 3
- 上传者