Advertisement
a53

numere19

a53
Jun 6th, 2020
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. /// numarul de numere de n cifre si prod cifrelor k
  2. /// complexitate : O(n * nrdiv(k))
  3. #include <cstdio>
  4. #include <cstring>
  5. #define MAX 9001
  6. #define CONST 9973
  7. #define INPUT "numere19.in"
  8. #define OUTPUT "numere19.out"
  9. using namespace std;
  10. int N, K, ndiv;
  11. int nrpos1[MAX], nrpos2[MAX], diviz[MAX];
  12. FILE *f = fopen(INPUT, "r");
  13. FILE *g = fopen(OUTPUT, "w");
  14.  
  15. int prim(int nr)
  16. {
  17. if(nr %2 == 0) return 0;
  18. int i;
  19. for(i = 3; i*i <= nr; i += 2)
  20. if(nr%i == 0) return 0;
  21. return 1;
  22. }
  23.  
  24. int main()
  25. {
  26. fscanf(f, "%d %d", &N, &K);
  27. int ok = 1, i, j, p;
  28. for(i = 11; i <= K && ok; ++i)
  29. if(K % i == 0 && prim(i)) ok = 0;
  30. for(i = 1; i <= K; ++i)
  31. if(K%i == 0) diviz[++ndiv] = i;
  32. if(ok)
  33. {
  34. for(i = 1; i <= ndiv && diviz[i] <= 9 ; ++i)
  35. nrpos1[diviz[i]] = 1;
  36. for(i = 2; i <= N; ++i)
  37. {
  38. for(j = 1; j <= ndiv; ++j)
  39. nrpos2[diviz[j]] = 0;
  40. for(j = 1; j <= ndiv; ++j)
  41. {
  42. for(p = 1; p <= ndiv && diviz[p] <= 9; ++p)
  43. if(diviz[j] % diviz[p] == 0)
  44. nrpos2[diviz[j]] = (nrpos2[diviz[j]] + nrpos1[diviz[j]/diviz[p]]) % CONST;
  45. }
  46. for(j = 1;j <= ndiv; ++j)
  47. nrpos1[diviz[j]] = nrpos2[diviz[j]] % CONST;
  48. }
  49. fprintf(g, "%d\n", nrpos1[K]);
  50. }
  51. else fprintf(g, "0\n");
  52. return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement