fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using ll = long long;
  4. const ll mod = 1e9 + 7;
  5. ll mul(ll a, ll b) { return ((a % mod) * (b % mod)) % mod; }
  6. ll pow_mod(ll a, ll b){
  7. ll ret = 1;
  8. while (b){
  9. if (b & 1) ret = mul(ret, a);
  10. a = mul(a, a);
  11. b /= 2;
  12. }
  13. return ret;
  14. }
  15. ll Inv(ll x) { return pow_mod(x, mod - 2); }
  16. int get_power(int n, int p) {
  17. int res = 0;
  18. for (int div = p; div <= n; div *= p)
  19. res += n / div;
  20. return res;
  21. }
  22. ll g(ll n) {
  23. return mul(mul(n, (n + 1)), Inv(2));
  24. }
  25. vector<int> sieve(int n) {
  26. vector<bool> p(n + 1, true);
  27. vector<int> result;
  28. p[0] = p[1] = false;
  29. for (int i = 2; i * i <= n; ++i) {
  30. if (p[i]) {
  31. for (int j = i * i; j <= n; j += i)
  32. p[j] = false;
  33. }
  34. }
  35. for (int i = 2; i <= n; ++i)
  36. if (p[i]) result.emplace_back(i);
  37. return result;
  38. }
  39. int main() { ios::sync_with_stdio(false); cin.tie(nullptr);
  40. #ifndef ONLINE_JUDGE
  41. freopen("in.txt", "r", stdin);
  42. #endif
  43. int tc = 1;
  44. // cin >> tc;
  45. int n;
  46. vector<int> primes = sieve(1e6 + 1);
  47. cont: while(cin >> n) {
  48. if(n == 0) return 0;
  49. ll ans = 1;
  50. for(auto& p : primes){
  51. if(p > n) break;
  52. int pw = get_power(n, p);
  53. ans = mul(ans, g(pw + 1));
  54. }
  55. cout << ans <<'\n';
  56. }
  57. return 0;
  58. }
Success #stdin #stdout 0.03s 5304KB
stdin
1000000
0
stdout
0