Advertisement
Guest User

Untitled

a guest
Feb 17th, 2013
632
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. public class Fib {
  2. static int MOD = 1000000007;
  3. static int K = 2;
  4.  
  5. static void mul(long A[][], long B[][], long C[][])
  6. {
  7. C[0][0] = (A[0][0] * B[0][0]) % MOD;
  8. C[0][0] = (C[0][0] + A[0][1] * B[1][0]) % MOD;
  9.  
  10. C[0][1] = (A[0][0] * B[0][1]) % MOD;
  11. C[0][1] = (C[0][1] + A[0][1] * B[1][1]) % MOD;
  12.  
  13. C[1][0] = (A[1][0] * B[0][0]) % MOD;
  14. C[1][0] = (C[1][0] + A[1][1] * B[1][0]) % MOD;
  15.  
  16. C[1][1] = (A[1][0] * B[0][1]) % MOD;
  17. C[1][1] = (C[1][1] + A[1][1] * B[1][1]) % MOD;
  18. }
  19.  
  20. static void pow(long A[][], long p, long out[][])
  21. {
  22. if (p == 1)
  23. {
  24. out[0][0] = A[0][0];
  25. out[0][1] = A[0][1];
  26. out[1][0] = A[1][0];
  27. out[1][1] = A[1][1];
  28. return;
  29. }
  30. if(p%2 != 0)
  31. {
  32. long B[][] =
  33. {
  34. {0, 0},
  35. {0, 0}
  36. };
  37. pow(A, p - 1, B);
  38. mul(A, B, out);
  39. }
  40. else
  41. {
  42. long X[][] =
  43. {
  44. {0, 0},
  45. {0, 0}
  46. };
  47. pow(A, p >> 1, X);
  48. mul(X, X, out);
  49. }
  50. }
  51.  
  52. static long fib(long N)
  53. {
  54. if(N==-1)
  55. return 0;
  56. if(N==0)
  57. return 1;
  58. if(N==1)
  59. return 1;
  60. long T[][] =
  61. {
  62. {1, 1},
  63. {1, 0}
  64. };
  65.  
  66. if (N == 1)
  67. return 1;
  68. long[] F1 = new long[K+1];
  69. F1[1] = 1;
  70. F1[2] = 1;
  71.  
  72. long RM[][] =
  73. {
  74. {0, 0},
  75. {0, 0}
  76. };
  77. pow(T, N-1, RM);
  78.  
  79. long res = RM[0][1] % MOD;
  80. res = (res + RM[0][0] ) % MOD;
  81. return res;
  82. }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement