Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- int n;
- int * min;
- int koren(int n) {
- for (int i = sqrt(n); i <= n; i++)
- if (n % i == 0)
- return i;
- }
- int rozl(int n) {
- if (min[n] != -1) return min[n];
- int m = -1;
- for (int i = 0; i < 2; i++) {
- if (not (koren(n-i) == 1 || koren(n-i) == n-i)) {
- int mk = rozl(koren(n-i))+rozl((n-i)/koren(n-i))+i;
- if (m > mk || m == -1)
- m = mk;
- }
- }
- return m;
- }
- int main() {
- scanf("%d", &n);
- min = new int[n+1];
- for (int i = 1; i <= n; i++)
- min[i] = -1;
- for (int i = 0; i <= n; i++) {
- if (i < 6) min[i] = i;
- else {
- min[i] = rozl(i);
- if (min[i]-min[i-1] > 1) {
- min[i] = min[i-1]+1;
- }
- }
- }
- printf("%d",min[n]);
- return 0;
- }
Add Comment
Please, Sign In to add comment