Advertisement
LEGEND2004

check

Dec 18th, 2022
860
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5. typedef long double ld;
  6. //#define int ll
  7. //#define double ld
  8. #define _FastIO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
  9. #define pii pair<int , int>
  10. #define pb emplace_back
  11. #define endl '\n'
  12. #define all(x) (x).begin() , (x).end()
  13. #define rall(x) (x).rbegin() , (x).rend()
  14. #define F first
  15. #define S second
  16. const int mod = 1e9 + 7;
  17. const int MAXX = 1e7 + 5;
  18. const int OP = 1e3 + 5;
  19. const int N = 1e3;
  20. const int INF = 1e18 + 123;
  21.  
  22. int t  , n , k;
  23. int dp[MAXX];
  24. bool p[OP];
  25. vector<int> v;
  26.  
  27. void sieve(){
  28.     p[2] = true;
  29.     for(int i = 3; i <= N; i += 2){
  30.         p[i] = true;
  31.     }
  32.     for(int i = 3; (i * i) <= N; i += 2){
  33.         if(p[i]){
  34.             for(int j = (i + i + i); j <= N; j += (i + i)){
  35.                 p[j] = false;
  36.             }
  37.         }
  38.     }
  39.     v.pb(2);
  40.     for(int i = 3; i <= N; i += 2){
  41.         if(p[i])
  42.             v.pb(i);
  43.     }
  44. }
  45.  
  46. int main()
  47. {
  48.     _FastIO;
  49.     sieve();
  50.     v.pb(1001);
  51.     dp[1] = 0;
  52.     dp[2] = 1;
  53.     int m = 1;
  54.     for(int i = 3; i <= 1e6; i++){
  55.         dp[i] = i - m;
  56.         k = i;
  57.         for(int j = 0; (v[j] * v[j]) <= i; j++){
  58.             if(i % v[j])
  59.                 continue;
  60.             while(k % v[j] == 0){
  61.                 k /= v[j];
  62.             }
  63.             dp[i] = min(dp[i] , dp[i / v[j]] + v[j]);
  64.         }
  65.         if(k > 1){
  66.             dp[i] = min(dp[i] , dp[i / k] + k);
  67.         }
  68.         m = max(m , i - dp[i]);
  69.     }
  70.  
  71.  
  72.     scanf("%d" , &t);
  73.     while(t--){
  74.         scanf("%d" , &n);
  75.         printf("%d" , dp[n]);
  76.         putchar('\n');
  77.     }
  78.     return 0;
  79. }
  80.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement