Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. #pragma warning(disable:4786)
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<algorithm>
  5. #include<vector>
  6. #include<set>
  7. #include<map>
  8. #include<functional>
  9. #include<string>
  10. #include<cstring>
  11. #include<cstdlib>
  12. #include<queue>
  13. #include<utility>
  14. #include<fstream>
  15. #include<sstream>
  16. #include<cmath>
  17. #include<stack>
  18. #include<cstdio>
  19. #include <ctime>
  20.  
  21.  
  22. using namespace std;
  23.  
  24. #define MEM(a,b) memset(a,(b),sizeof(a))
  25. #define MAX(a,b) ((a) > (b) ? (a) : (b))
  26. #define MIN(a,b) ((a) < (b) ? (a) : (b))
  27. #define istr(S) istringstream sin(S)
  28. #define MP make_pair
  29. #define pb push_back
  30. #define inf 1000000000
  31.  
  32. #define M 1000003
  33.  
  34. typedef long long LL;
  35. //typedef __int64 LL;
  36.  
  37. typedef pair<int,int> pi;
  38. typedef vector<int> vi;
  39. typedef vector<string> vs;
  40. typedef vector<double> vd;
  41. typedef vector<pi> vpi;
  42.  
  43. LL arr[105];
  44. int fact[M],ifact[M];
  45. int digs[100],n;
  46.  
  47. int conv(LL n,int p)
  48. {
  49. int i,j,tot=0;
  50.  
  51. if(n==0) digs[tot++]=0;
  52.  
  53. while(n)
  54. {
  55. digs[tot++]=n%p;
  56. n/=p;
  57. }
  58. //reverse(digs,digs+tot);
  59. return tot;
  60. }
  61.  
  62. LL modexp(LL a,LL b,LL c)
  63. {
  64. if(b==0) return 1%c;
  65. if(b%2) return ((a%c)*modexp(a,b-1,c))%c;
  66. LL q=modexp(a,b/2,c);
  67. return (q*q)%c;
  68. }
  69.  
  70. LL nck2(int n,int k)
  71. {
  72. if(n<k) return 0;
  73. LL ret=fact[n];
  74. ret=(ret*ifact[k])%M;
  75. ret=(ret*ifact[n-k])%M;
  76. return ret;
  77.  
  78. }
  79.  
  80. LL nck(LL n,int k)
  81. {
  82. if(n/M==0) return nck2(n,k);
  83. return nck(n/M,k);
  84. }
  85.  
  86.  
  87. LL gcd(LL a,LL b)
  88. {
  89. if(b==0) return a;
  90. return gcd(b,a%b);
  91. }
  92.  
  93.  
  94. LL prod[105];
  95.  
  96. int main()
  97. {
  98. int i,j,k,tests,cs=0,p;
  99. LL n,K;
  100.  
  101. fact[0]=ifact[0]=1;
  102. for(i=1;i<M;i++)
  103. {
  104. fact[i]=((LL)fact[i-1]*i)%M;
  105. ifact[i]=modexp(fact[i],M-2,M);
  106. }
  107.  
  108. scanf("%d",&tests);
  109. while(tests--)
  110. {
  111. //scanf("%I64d%I64d%d",&n,&K,&p);
  112. scanf("%lld%lld%d",&n,&K,&p);
  113.  
  114. if(n==0)
  115. {
  116. puts("1");
  117. continue;
  118. }
  119.  
  120. LL lp1=nck(K+p-1,p-1),lp=1;
  121.  
  122. int m=conv(n+1,p);
  123. LL inv=modexp(K,M-2,M);
  124. LL ans=0;
  125.  
  126. for(i=m-1;i>=0;i--)
  127. {
  128. prod[i]=nck(digs[i]+K-1,digs[i]);
  129. if(i!=m-1)
  130. prod[i]=(prod[i]*prod[i+1])%M;
  131. }
  132.  
  133. for(k=0;k<m;k++)
  134. {
  135. LL q=(lp*digs[k])%M;
  136. q=(q*inv)%M;
  137. q=(q*prod[k])%M;
  138.  
  139. ans=(ans+q)%M;
  140. lp=(lp*lp1)%M;
  141. }
  142.  
  143. // printf("%I64d\n",ans);
  144. printf("%lld\n",ans);
  145.  
  146. }
  147.  
  148. return 0;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement