#include #include int prvocisla[200]; int pocet_prvoci = 1; int pole[432]; int prime(int x) { int i; for (i = 2; i < x; i++) if ((x%i) == 0) return 0; return 1; } void primes(void) { int i; for (i = 2; i <= 431; i++) if (prime(i)) { prvocisla[pocet_prvoci] = i; pocet_prvoci++; } } void process(int n, int k) { int res; printf("%d\n", res); } int del(int x) { int i; int res = 0; for (i = 1; i <= x; i++) if ((x%i) == 0) res++; return res; } void clear(void) { int i; for (i = 0; i <= 431 ; i++) pole[i] = 0; } int x(int nk, int n, int k) { int i,j,z; double ret; for (i = 2; i <= n; i++) pole[i]++; for (i = 2; i <= k; i++) pole[i]--; for (i = 2; i <= n-k; i++) pole[i]--; /*for (i = 2; i <= n; i++) printf("%d: %d\n", i, pole[i]); */ for (i = n; i >= 2; i--) { if (pole[i] == 0) continue; /* printf("ide %d\n", i); */ for (j = 1; j <= pocet_prvoci; j++) { if ((i % prvocisla[j]) == 0) { z = i / prvocisla[j]; if (z == 1) break; pole[prvocisla[j]] += pole[i]; pole[z] += pole[i]; pole[i] = 0; /* printf("mazem: %d, pridavam: %d, %d\n", i, prvocisla[j], z); */ break; } } } /*for (i = 2; i <= n; i++) printf("%d: %d\n", i, pole[i]); */ ret = 1; for (i = 2; i <= n; i++) ret *= (pole[i] + 1); printf("%.0f\n", ret); return ret; } int main(void) { char line[4096]; int n, k; primes(); while (fgets(line, sizeof(line), stdin) != NULL) { sscanf(line, "%d %d", &n, &k); clear(); x(n-k, n, k); } return 0; }