• Source
    1. #include <iostream>
    2. #define MaxLen 15000
    3. using namespace std;
    4.  
    5. int NumtoArr (int x, int arr[])
    6. {
    7. int p=1;
    8. int len=0;
    9. while (x/p!=0)
    10. {
    11. p=p*10;
    12. len++;
    13. }
    14. p=p/10;
    15. for (int i=0; i<len; i++)
    16. {
    17. arr[i]=(x/p)%10;
    18. p=p/10;
    19. }
    20. return len;
    21. }
    22.  
    23. int SumBig (int arrA[], int lenA, int arrB[], int lenB, int arrC[])
    24. {
    25. int len; //length max;
    26. if (lenA>lenB) len=lenA;
    27. else len=lenB;
    28.  
    29. int lenC=0;
    30. int nho=0;
    31. for (int i=MaxLen-1; i>=MaxLen-len; i--)
    32. {
    33. int so=(arrA[i]+arrB[i])+nho;
    34. arrC[i]=so%10;
    35. nho=so/10;
    36. lenC++;
    37. if (i==MaxLen-len && so/10>0) {
    38. lenC++;
    39. arrC[i-1]=so/10;
    40. }
    41. }
    42. return lenC;
    43. }
    44.  
    45. int cop (int arrB[], int lenB, int arrC[])
    46. {
    47. for (int i=MaxLen-1; i>=0; i--)
    48. {
    49. if (i>=MaxLen-lenB) arrC[i]=arrB[i];
    50. else arrC[i]=0;
    51. }
    52. return lenB;
    53. }
    54.  
    55. int PeBig (int arrA[], int lenA, int arrB[], int lenB, int arrC[])
    56. {
    57. int arrAtg[MaxLen];
    58. int arrBtg[MaxLen];
    59. int arrCtg[MaxLen];
    60. for (int i=0; i<MaxLen; i++)
    61. {
    62. arrAtg[i]=0;
    63. arrBtg[i]=0;
    64. }
    65. int lenAtg=0;
    66. int lenBtg=0;
    67. int lenCtg=0;
    68. for (int i=lenB-1, vt=0; i>=0, vt<=lenB-1; i--, vt++)
    69. {
    70. for (int j=0; j<MaxLen; j++) arrAtg[i]=0;
    71. int nho=0;
    72. lenAtg=vt;
    73. for (int j=MaxLen-1; j>=MaxLen-lenA; j--)
    74. {
    75. int so=(arrB[i]*arrA[j])+nho;
    76. arrAtg[j-vt]=so%10;
    77. nho=so/10;
    78. lenAtg++;
    79. arrAtg[j-vt-1]=so/10;
    80. if (j==MaxLen-lenA && so/10>0) lenAtg++;
    81. }
    82. lenCtg=SumBig (arrAtg, lenAtg, arrBtg, lenBtg, arrCtg);
    83. lenBtg=cop (arrCtg, lenCtg, arrBtg);
    84. }
    85. cop (arrBtg, lenBtg, arrC);
    86. return lenBtg;
    87. }
    88.  
    89. int main ()
    90. {
    91. int t;
    92. cin>>t;
    93. for (int i=1; i<=t; i++)
    94. {
    95. int n, x;
    96. cin>>n>>x;
    97. int dem=0;
    98. if (n<20)
    99. {
    100. long long s=1;
    101. for (int j=1; j<=n; j++)
    102. {
    103. s*=j;
    104. }
    105. long long p=1;
    106. while (s/p!=0)
    107. {
    108. int so=(s/p)%10;
    109. if (so==x) dem++;
    110. p=p*10;
    111. }
    112. cout<<dem<<endl;
    113. }
    114. else
    115. {
    116.  
    117. int S[MaxLen]={1, 2, 1, 6, 4, 5, 1, 0, 0, 4, 0, 8, 8, 3, 2, 0, 0, 0};
    118. int lenS=18;
    119. for (int i=MaxLen-1, j=lenS-1; i>=MaxLen-lenS, j>=0; i--, j--)
    120. {
    121. S[i]=S[j];
    122. }
    123. int Stg[MaxLen];
    124. int lenStg=0;
    125. int arr[4];
    126. int lens=0;
    127. for (int i=20; i<=n; i++)
    128. {
    129. lens = NumtoArr (i, arr);
    130. lenStg=PeBig (S, lenS, arr, lens, Stg);
    131. lenS=cop (Stg, lenStg, S);
    132. }
    133. int dem=0;
    134. for (int i=MaxLen-lenS; i<MaxLen; i++)
    135. {
    136. if (S[i]==x) dem++;
    137. }
    138. cout<<dem<<endl;
    139. }
    140. }
    141. return 0;
    142. }