Vladislav_Bezruk

Some task

Dec 18th, 2020 (edited)
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.74 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int n;
  5. int * min;
  6.  
  7. int koren(int n) { 
  8.     for (int i = sqrt(n); i <= n; i++)
  9.     if (n % i == 0)
  10.     return i;  
  11. }
  12.  
  13. int rozl(int n) {
  14.     if (min[n] != -1) return min[n];
  15.     int m = -1;
  16.     for (int i = 0; i < 2; i++) {
  17.         if (not (koren(n-i) == 1 || koren(n-i) == n-i)) {
  18.             int mk = rozl(koren(n-i))+rozl((n-i)/koren(n-i))+i;
  19.             if (m > mk || m == -1)
  20.             m = mk;
  21.         }
  22.     }
  23.     return m;  
  24. }
  25.  
  26. int main() {
  27.    
  28.     scanf("%d", &n);
  29.    
  30.     min = new int[n+1];
  31.     for (int i = 1; i <= n; i++)
  32.     min[i] = -1;
  33.    
  34.     for (int i = 0; i <= n; i++) {
  35.         if (i < 6) min[i] = i;
  36.         else {
  37.             min[i] = rozl(i);
  38.             if (min[i]-min[i-1] > 1) {
  39.                 min[i] = min[i-1]+1;
  40.             }
  41.         }  
  42.     }
  43.    
  44.     printf("%d",min[n]);
  45.     return 0;
  46. }
Add Comment
Please, Sign In to add comment