Advertisement
a53

summy

a53
Aug 11th, 2019
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. #include <iostream>
  2. #define P 1000000007
  3. #define ll long long
  4. using namespace std;
  5. ll n, k, suma, i, j, sol, y, numarator, numitor;
  6.  
  7. void gcd(ll &x, ll &y, ll a, ll b)
  8. {
  9. if (!b)
  10. x = 1, y = 0;
  11. else
  12. {
  13. gcd(x, y, b, a % b);
  14. ll aux = x;
  15. x = y;
  16. y = aux - y * (a / b);
  17. }
  18. }
  19.  
  20. ll invers(ll x)
  21. {
  22. ll ins, inv = 0;
  23. gcd(inv, ins, x, P);
  24. if (inv <= 0)
  25. inv = P + inv % P;
  26. return inv;
  27. }
  28.  
  29. ll pu(ll b, ll e)
  30. {
  31. if(e == 0) return 1;
  32. else
  33. if(e % 2 == 0)
  34. {
  35. ll x = pu(b,e / 2);
  36. return (x * x) % P;
  37. }
  38. else return (b * pu(b,e-1)) % P;
  39. }
  40.  
  41. int main()
  42. {
  43. cin >> n >> k;
  44. if(n <= 100000)
  45. {
  46. sol = 0;
  47. for(i = 1; i <= n; i++)
  48. sol = (sol + pu(i,k)) % P;
  49. }
  50. else
  51. {
  52. suma = 1;
  53. numarator = 1;
  54. numitor = 1;
  55. for(i = 2; i <= k+2; i++)
  56. {
  57. numarator = (numarator*(n-i)) % P;
  58. numitor = (numitor*(1-i)) % P;
  59. }
  60. if(numitor < 0) numitor += P;
  61. sol = (numarator*invers(numitor)) % P;
  62. for(i = 2; i <= k+2; i++)
  63. {
  64. suma = (suma + pu(i,k)) % P;
  65. numarator = (numarator*(n-i+1)) % P;
  66. numarator = (numarator*invers(n-i)) % P;
  67. numitor = (numitor*(i-1)) % P;
  68. numitor = (-numitor*invers(k+3-i)) % P;
  69. if(numitor < 0) numitor += P;
  70. y = (numarator*invers(numitor)) % P;
  71. sol = (sol + suma * y) % P;
  72. }
  73. }
  74. cout << sol;
  75. return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement