fork(4) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define lint long long int
  4. lint max=1000000007;
  5. lint arr[3000006]={0};
  6. lint pow[3000006]={0};
  7. void set()
  8. {
  9. pow[0]=1;
  10. lint i=0;
  11. for(i=1;i<=2000001;i++)
  12. pow[i]=(pow[i-1]*23)%max;
  13.  
  14. }
  15. lint FormArray(lint arr[],lint n)
  16. {
  17. lint i,j,carry,sum;
  18. j=1;
  19. carry=0;
  20. for(i=2000001;j<=n;j++,i--)
  21. {
  22. sum=carry+j;
  23. carry=sum/10;
  24. arr[i]=sum%10;
  25. }
  26. j=j-2;
  27. for(;j>0;i--,j--)
  28. {
  29. sum=j+carry;
  30. carry=sum/10;
  31. arr[i]=sum%10;
  32. //if(i<0)
  33. // printf("Ooopsss\n");
  34. }
  35. return i+1;
  36. }
  37. lint MulArray(lint arr[],lint p,lint d)
  38. {
  39. lint carry=0,sum,i;
  40. for(i=2000001;i>=p||carry!=0;i--)
  41. {
  42. sum=arr[i]*d+carry;
  43. arr[i]=sum%10;
  44. carry=sum/10;
  45. }
  46. return i+1;
  47. }
  48. lint Mulpow(lint arr[],lint pow[],lint p)
  49. {
  50. lint sum=0,i,j;
  51. for(i=p,j=0;i<=2000001;i++,j++)
  52. {
  53. sum=sum+(arr[i]*pow[j])%max;
  54. sum=sum%max;
  55. }
  56. return sum;
  57. }
  58. int main()
  59. {
  60. int test;
  61. lint n,p,d,sum,i;
  62. scanf("%d",&test);
  63. set();
  64. while(test--)
  65. {
  66. scanf("%lld%lld",&n,&d);
  67. p=FormArray(arr,n);
  68. p=MulArray(arr,p,d*d);
  69. sum=Mulpow(arr,pow,p);
  70. printf("%lld\n",sum);
  71. for(i=p;i<=2000001;i++)
  72. arr[i]=0;
  73. }
  74. return 0;
  75. }
  76.  
Runtime error #stdin #stdout 0.38s 48992KB
stdin
Standard input is empty
stdout
Standard output is empty