fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4.  
  5. int ans[500005];
  6.  
  7. void precomp(){
  8. for(int i = 2; i <= 500000; i++)ans[i] = 1e9;
  9.  
  10. ans[1] = 1;
  11. for(int i = 3; i <= 500000; i++){
  12. if(i>2)ans[i] = min(ans[i], ans[i-2]+1);
  13. if(i%3==0)ans[i] = min(ans[i], ans[i/3]+1);
  14.  
  15. for(int j = 2; j*j <= i; j++){
  16. if(i%j==0)ans[i] = min(ans[i], ans[i/j] + ans[j-2]);
  17. }
  18. }
  19.  
  20. for(int i = 2; i <= 500000; i++)ans[i] = (ans[i] == 1e9? -1:ans[i]);
  21. }
  22.  
  23. void fun(){
  24. int m;
  25. cin >> m;
  26. cout << ans[m] << '\n';
  27. }
  28.  
  29. main() {
  30. precomp();
  31. int t; cin >> t;
  32. while(t--)fun();
  33. }
Success #stdin #stdout 2.54s 7460KB
stdin
6
1
3
5
7
9
25
stdout
1
2
3
4
3
5