Advertisement
Guest User

Untitled

a guest
Apr 20th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.44 KB | None | 0 0
  1. #include <cstdio>
  2. #define D6 1000000
  3. #define MAX 2
  4. unsigned long long ID[2][2] = {{1,0},{0,1}};
  5. unsigned long long n,k,l;
  6.  
  7. void multiplica(unsigned long long a[MAX][MAX],unsigned long long b[MAX][MAX])
  8. {
  9. unsigned long long aux[MAX][MAX] = {{0}};
  10.  
  11. for(int i = 0; i < MAX; i++)
  12. for(int j = 0; j < MAX; j++)
  13. for(int k = 0; k < MAX;k++)
  14. aux[i][j] += (a[i][k]%D6 * b[k][j]%D6)%D6;
  15.  
  16. for(int i = 0;i < MAX; i++)
  17. for(int j = 0; j < MAX; j++)
  18. a[i][j] = aux[i][j]%D6;
  19. }
  20.  
  21. void pow(unsigned long long m[2][2], unsigned long long n, unsigned long long resultado[2][2])
  22. {
  23. resultado[0][0] = resultado[1][1] = 1;
  24. resultado[1][0] = resultado[0][1] = 0;
  25.  
  26. while (n > 0)
  27. {
  28. if (n%2 == 0)
  29. {
  30. multiplica(m,m);
  31. n /= 2;
  32. }
  33. else
  34. {
  35. multiplica(resultado,m);
  36. n--;
  37. }
  38. }
  39. }
  40.  
  41. int main()
  42. {
  43. n = k = l = 0;
  44.  
  45. while(scanf("%llu %llu %llu",&n,&k,&l) != EOF)
  46. {
  47. unsigned long long aux[2][2]= {{1,0},{0,1}};
  48. unsigned long long aux2[2][2] = {{0}};
  49. unsigned long long matrizPrp[2][2] = {{0,l%D6},{1,k%D6}};
  50. unsigned long long esquecida[2][2] = {{1,k%D6},{0,0}};
  51. unsigned long long N = n/5;
  52.  
  53. pow(matrizPrp, N , aux);
  54. multiplica(esquecida, aux);
  55. printf("%06llu\n", esquecida[0][0]);
  56. }
  57.  
  58. return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement