Advertisement
Salman_CUET_18

ML Solution

Jul 8th, 2020
786
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.23 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define M 100000000
  3. #define on(x) (marked[x / 64] & (1 << (( x % 64) / 2)))
  4. #define mark(x) (marked[x / 64] |= (1 << ((x % 64) / 2)))
  5. using namespace std;
  6. int marked[M / 64 + 1];
  7. vector<int>primes;
  8. void sieve(void)
  9. {
  10.     for(int i = 3; i * i <= M; i += 2)
  11.     {
  12.         if(!on(i))
  13.         {
  14.             for(int j = i * i; j <= M; j += i + i)
  15.                 mark(j);
  16.         }
  17.     }
  18.     primes.push_back(2);
  19.     for(int i = 3; i <= M; i += 2)
  20.     {
  21.         if(!on(i))
  22.             primes.push_back(i);
  23.     }
  24. }
  25. unsigned int dp[5761482];
  26. void precal()
  27. {
  28.     dp[0] = 2;
  29.     for(int i = 1; i < primes.size(); i++) dp[i] = dp[i-1] * primes[i];
  30. }
  31. main()
  32. {
  33.     sieve();
  34.     precal();
  35.     int tc; scanf("%d", &tc);
  36.     for(int caseno = 1; caseno <= tc; caseno++)
  37.     {
  38.         int n; scanf("%d", &n);
  39.         unsigned int ans = 1;
  40.         for(int i = 0; i < primes.size() && primes[i] * primes[i] <= n; i++)
  41.         {
  42.             int t = n / primes[i];
  43.             while(t >= primes[i]) t /= primes[i], ans *= primes[i];
  44.         }
  45.         int idx = upper_bound(primes.begin(), primes.end(), n) - primes.begin();
  46.         ans = ans * dp[idx-1];
  47.         printf("Case %d: %u\n", caseno, ans);
  48.     }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement