fork download
  1. #include <math.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <assert.h>
  6. #include <limits.h>
  7. #include <stdbool.h>
  8.  
  9. #define N_MAX 1000001
  10.  
  11. int solns[N_MAX];
  12.  
  13. void initialize_solns() {
  14. for (int i = 0; i < N_MAX; i++) {
  15. solns[i] = 0;
  16. }
  17. solns[1] = 1;
  18. solns[2] = 2;
  19. solns[3] = 3;
  20. solns[4] = 3;
  21. // Actually solve
  22. for (int i = 1; i < N_MAX; i++) {
  23. if (!solns[i] || solns[i-1] + 1 < solns[i]) {
  24. solns[i] = solns[i-1] + 1;
  25. }
  26. for (int j = 1; j <= i && j * i < N_MAX; j++) {
  27. if (!solns[j*i] || solns[i] + 1 < solns[j*i]) {
  28. solns[j*i] = solns[i] + 1;
  29. }
  30. }
  31. }
  32. }
  33.  
  34. int main() {
  35. initialize_solns();
  36. int Q;
  37. scanf("%i", &Q);
  38. for(int a0 = 0; a0 < Q; a0++){
  39. int N;
  40. scanf("%i", &N);
  41. printf("%d\n", solns[N]);
  42. }
  43. return 0;
  44. }
Success #stdin #stdout 0.03s 5448KB
stdin
45
stdout
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8