poj 3070 矩阵快速幂

£神魔★判官ぃ 2022-08-07 14:53 255阅读 0赞
  1. poj3070
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5. #define M_H 2
  6. #define M_L 2
  7. typedef struct ma
  8. {
  9. int h, l;
  10. int a[M_H][M_L];
  11. }ma;
  12. ma need, anser;
  13. void init()
  14. {
  15. need.h=2; need.l=2;
  16. anser.h=2; anser.l=2;
  17. need.a[0][0]=1; anser.a[0][0]=1;
  18. need.a[0][1]=1; anser.a[0][1]=0;
  19. need.a[1][0]=1; anser.a[1][0]=0;
  20. need.a[1][1]=0; anser.a[1][1]=1;
  21. }
  22. ma multi(ma a, ma b)
  23. {
  24. ma c;
  25. c.h=a.h; c.l=b.l;
  26. for(int i=0; i<c.h; i++) for(int j=0; j<c.l; j++) c.a[i][j]=0;
  27. for(int i=0; i<c.h; i++){
  28. for(int j=0; j<c.l; j++){
  29. int ans=0;
  30. for(int k=0; k<a.h; k++){
  31. ans += (a.a[i][k] * b.a[k][j])%10000;
  32. }
  33. c.a[i][j]=ans%10000;
  34. }
  35. }
  36. return c;
  37. }
  38. int main()
  39. {
  40. int m;
  41. while( scanf("%d", &m) != -1 ){
  42. if(m==-1) break;
  43. init();
  44. while(m>0){
  45. if(m&1){
  46. anser = multi(anser, need);
  47. }
  48. need = multi(need, need);
  49. m = m>>1;
  50. }
  51. printf("%d\n", anser.a[0][1]%10000);
  52. }
  53. return 0;
  54. }

发表评论

表情:
评论列表 (有 0 条评论,255人围观)

还没有评论,来说两句吧...

相关阅读