Advertisement
leoanjos

Makoto and a Blackboard

Nov 20th, 2021
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define long long long int
  6.  
  7. const int MOD = 1e9 + 7;
  8.  
  9. long pow(long a, long n) {
  10.     if (!n) return 1LL;
  11.  
  12.     long ans = pow(a, n >> 1LL);
  13.     ans = (ans * ans) % MOD;
  14.  
  15.     if (!(n & 1LL)) return ans;
  16.     return (ans * a) % MOD;
  17. }
  18.  
  19. long mod_mult_inv(long a, long m) {
  20.     assert(gcd(a, m) == 1);
  21.     return pow(a, m - 2);
  22. }
  23.  
  24. int main() {
  25.     ios_base::sync_with_stdio(false);
  26.     cin.tie(NULL);
  27.  
  28.     long n; int k;
  29.     cin >> n >> k;
  30.  
  31.     map<long, int> cnt;
  32.     for (long i = 2LL; i * i <= n; i++)
  33.         while (!(n % i)) cnt[i]++, n /= i;
  34.  
  35.     if (n > 1LL) cnt[n]++;
  36.  
  37.     int ans = 1;
  38.     for (auto [p, c]: cnt) {
  39.         int last = p;
  40.         vector<int> sums(c + 1);
  41.         vector<long> invs(c + 1);
  42.  
  43.         sums[0] = 1;
  44.         invs[0] = 1LL;
  45.  
  46.         for (int i = 1; i <= c; i++) {
  47.             invs[i] = mod_mult_inv(i + 1, MOD);
  48.             sums[i] = (sums[i - 1] + last) % MOD;
  49.             last = (last * p) % MOD;
  50.         }
  51.  
  52.         for (int i = 0; i < k; i++) {
  53.             vector<int> new_sums(c + 1);
  54.             new_sums[0] = (invs[0] * sums[0]) % MOD;
  55.  
  56.             for (int j = 1; j <= c; j++) {
  57.                 last = (invs[j] * sums[j]) % MOD;
  58.                 new_sums[j] = (new_sums[j - 1] + last) % MOD;
  59.             }
  60.  
  61.             sums = new_sums;
  62.         }
  63.  
  64.         ans = (1LL * ans * last) % MOD;
  65.     }
  66.  
  67.     cout << ans << "\n";
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement