题目链接:https://vjudge.net/problem/CodeForces-1228C
题解:把x的每个质因子找出来,计算n!对每个因子的贡献
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
const int N = 1e5 + 10;
int prime[N];
int ok[N], len;
vector<int> v;
ll x, n;
ll ksm(ll x, ll y) {
ll res = 1;
while(y) {
if(y & 1) res = res * x % mod;
x = x * x % mod;
y >>= 1;
}
return res;
}
int main() {
for(int i = 2; i <= 100000; i++) {
if(!ok[i]) {
prime[len++] = i;
}
for(int j = 0; j < len && (ll)prime[j] * i <= 100000; j++) {
ok[i * prime[j]] = 1;
if(i % prime[j] == 0) break;
}
}
cin >> x >> n;
for(int i = 0; i < len && (ll)prime[i] * prime[i] <= x; i++) {
if(x % prime[i] == 0) {
v.push_back(prime[i]);
while(x % prime[i] == 0) x /= prime[i];
}
}
if(x > 1) {
v.push_back(x);
}
ll ans = 1;
for(int i = 0; i < v.size(); i++) {
ll cnt = v[i];
ll num = 0;
ll m = n;
while(m) {
num += m / cnt;
m /= cnt;
}
ans = (ans * ksm(v[i], num)) % mod;
}
cout << ans << endl;
return 0;
}