fork(1) download
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define mod 1000000007
  4.  
  5. using namespace std;
  6.  
  7. void multiply(ll m1[2][2],ll m2[2][2])
  8. {
  9. ll mult[2][2];
  10. for(ll i=0;i<2;i++)
  11. {
  12. for(ll j=0;j<2;j++)
  13. {
  14. mult[i][j]=0;
  15. for(ll k=0;k<2;k++)
  16. {
  17. mult[i][j]+=((m1[i][k])%mod * (m2[k][j])%mod)%mod;
  18. }
  19. }
  20. }
  21. for(ll i=0;i<2;i++)
  22. {
  23. for(ll j=0;j<2;j++)
  24. {
  25. m1[i][j]=mult[i][j];
  26. }
  27. }
  28. }
  29.  
  30. void fibb(ll F[2][2],ll N)
  31. {
  32. if(N==0)
  33. {
  34. return;
  35. }
  36. ll b[2][2]={{1,1},{1,0}};
  37. while(N)
  38. {
  39. if(N&1)
  40. {
  41. multiply(F,b);
  42. }
  43. multiply(b,b);
  44. N>>=1;
  45. }
  46. }
  47.  
  48. ll findsum(ll N,ll M)
  49. {
  50.  
  51. ll F[2][2]={{1,0},{0,1}};
  52. fibb(F,M+1);
  53. ll q=F[0][0];
  54. ll Q[2][2]={{1,0},{0,1}};
  55. fibb(Q,N);
  56. ll p=Q[0][0];
  57. p=(mod-p)%mod;
  58. return (q+p)%mod;
  59. }
  60.  
  61. int main()
  62. {
  63. ios_base::sync_with_stdio(false);
  64. cin.tie(NULL);
  65. ll t;
  66. cin>>t;
  67. while(t--)
  68. {
  69. ll N,M;
  70. cin>>N>>M;
  71. cout<<findsum(N,M)<<endl;
  72. }
  73. return 0;
  74. }
  75.  
Success #stdin #stdout 0s 15240KB
stdin
3
0 10
0 5
0 10000
stdout
143
12
295719787