fork(1) download
  1. #include <stdio.h>
  2.  
  3. #define PRIMES_COUNT 37
  4. #define MAX_PRIMES 10
  5.  
  6. int main() {
  7. static int primes[PRIMES_COUNT] = {
  8. 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53,
  9. 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
  10. 127, 131, 137, 139, 149, 151, 157
  11. };
  12.  
  13. unsigned int k;
  14. int i, n;
  15. int current_prime = 0, answer = -1;
  16. unsigned int temp;
  17. int key_index;
  18.  
  19. int multK[MAX_PRIMES];
  20. int keys[MAX_PRIMES];
  21. int multN[MAX_PRIMES];
  22.  
  23. for (i = 0; i < MAX_PRIMES; i++) {
  24. multK[i] = 0;
  25. keys[i]=0;
  26. multN[i] = 0;
  27. }
  28.  
  29. scanf("%d%u", &n, &k);
  30.  
  31. temp = k;
  32. key_index=0;
  33.  
  34. int increase_key = 0;
  35.  
  36. while (current_prime < PRIMES_COUNT)
  37. if (temp % primes[current_prime] == 0) {
  38. temp /= primes[current_prime];
  39. if ( multK[key_index]==0 )
  40. {
  41. keys[key_index]=primes[current_prime];
  42. increase_key = 1;
  43. }
  44. multK[key_index]++;
  45. } else
  46. {
  47. current_prime++;
  48.  
  49. if (increase_key==1)
  50. {
  51. increase_key = 0;
  52. key_index++;
  53. }
  54.  
  55. if (key_index>=MAX_PRIMES)
  56. {
  57. printf("Слишком маленький размер массива ключей");
  58. exit(1);
  59. }
  60. }
  61.  
  62. for (i = 2; i <= n; i++) {
  63. int temp = i;
  64. key_index=0;
  65. while (key_index<MAX_PRIMES && multK[key_index]!=0)
  66. if (temp % keys[key_index] == 0) {
  67. temp /= keys[key_index];
  68. multN[key_index]++;
  69. } else key_index++;
  70.  
  71. }
  72.  
  73. for (i = 0; i < MAX_PRIMES && multK[i]!=0; i++) {
  74. temp = multN[i] / multK[i];
  75. if (temp < answer || answer == -1) answer = temp;
  76. }
  77.  
  78. printf ("%i\n", answer);
  79. return (0);
  80. }
Success #stdin #stdout 0s 2296KB
stdin
100 100
stdout
12