Advertisement
tuki2501

SQRNUM.cpp

Oct 16th, 2022
677
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5.  
  6. const ll MOD = 1e9 + 7;
  7.  
  8. int minPrime[10000001];
  9.  
  10. ll binpow(ll a, ll b) {
  11.     if (b == 0) return 1;
  12.     ll t = binpow(a, b / 2);
  13.     t = (t * t) % MOD;
  14.     if (b % 2) return (t * a) % MOD;
  15.     return t;
  16. }
  17.  
  18. void solve() {
  19.     int n; cin >> n;
  20.     vector<int> a(n + 1);
  21.     for (int i = 1; i <= n; i++) {
  22.         int j = i;
  23.         while (j != 1) {
  24.             a[minPrime[j]]++;
  25.             j /= minPrime[j];
  26.         }
  27.     }
  28.     ll ans = 1;
  29.     for (int i = 1; i <= n; i++) {
  30.         ans *= binpow(i, a[i] - a[i] % 2);
  31.         ans %= MOD;
  32.     }
  33.     cout << ans << '\n';
  34. }
  35.  
  36. int main() {
  37.     cin.tie(0)->sync_with_stdio(0);
  38.     for (int i = 2; i <= 10000000; i++) {
  39.         if (minPrime[i]) continue;
  40.         for (int j = i; j <= 10000000; j += i) {
  41.             if (!minPrime[j]) minPrime[j] = i;
  42.         }
  43.     }
  44.     int T = 1; cin >> T;
  45.     while (T--) solve();
  46. }
  47.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement