zoukankan      html  css  js  c++  java
  • 斐波那契数列

    1. F[0]=0;

      F[1]=1;

      F[n]=F[n-1]+F[n-2], for n>1

      给出n (0<=n<=10000) 和 m (0<m<10000);求斐波那契数列第n项mod m的值(因为太大了);

    2. #include<stdio.h>
    3. #include<string.h>
    4. // 矩阵快速幂
    5. void xx(longlong a[][3],longlong b[][3],longlong m){
    6. longlong tmp[3][3];
    7. tmp[1][1]= tmp[1][2]= tmp[2][1]= tmp[2][2]=0;
    8. for(int i =1; i <=2; i++){
    9. for(int j =1; j <=2; j++){
    10. for(int k =1; k <=2; k++){
    11. tmp[i][j]+=(a[i][k]%m*b[k][j]%m)%m;
    12. }
    13. }
    14. }
    15. for(int i =1; i <=2; i++)
    16. for(int j =1; j <=2; j++) a[i][j]= tmp[i][j]%m;
    17. }
    18. int main(){
    19. // ans初值是单位矩阵
    20. longlong T, ans[3][3], r[3][3], n, m;
    21. r[1][2]= r[2][1]= r[2][2]= ans[1][1]= ans[2][2]=1;
    22. r[1][1]= ans[1][2]= ans[2][1]=0;
    23. scanf("%lld%lld",&n,&m);
    24. if(!n){printf("%lld ",0% m);return0;}
    25. if(n ==1){printf("%lld ",1% m);return0;}
    26. n--;
    27. while(n){
    28. if(n &1) xx(ans, r, m);
    29. n >>=1;
    30. xx(r, r, m);
    31. }
    32. printf("%lld ", ans[2][2]% m);
    33. return0;
    34. }
  • 相关阅读:
    第二阶段冲刺6
    第二阶段冲刺5
    第二阶段冲刺4
    第二阶段冲刺3
    暑假学习进度七
    暑假学习进度六
    暑假学习进度五
    暑假学习进度四
    暑假学习进度三
    暑假学习进度二
  • 原文地址:https://www.cnblogs.com/sysu-zhengwsh/p/3674186.html
Copyright © 2011-2022 走看看