Advertisement
Guest User

Untitled

a guest
Feb 29th, 2020
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.36 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream f("veverita.in");
  6. ofstream g("veverita.out");
  7.  
  8. typedef long long ll;
  9. const ll mod = 666013;
  10. ll n, ans, sol;
  11. typedef ll mare[5005] ;
  12. mare A, B;
  13. void atrib(mare A, ll m)
  14. {
  15.     A[0] = 0;
  16.     while(m)
  17.     {
  18.         A[0]++;
  19.         A[ A[0] ] = m % 10;
  20.         m /= 10;
  21.     }
  22. }
  23. void atribM(mare A, mare B) /// B = A
  24. {
  25.     for(int i = 0; i <= A[0]; ++i)
  26.         B[i] = A[i];
  27.  
  28. }
  29. void multi(mare A, mare B, mare C) /// C = A * B
  30. {
  31.     ll T = 0;
  32.     C[0] = A[0] + B[0] - 1;
  33.     for(int i = 1; i <= A[0] + B[0]; ++i)
  34.         C[i] = 0;
  35.     for(int i = 1; i <= A[0]; ++i)
  36.         for(int j = 1; j <= B[0]; ++j)
  37.             C[i + j - 1] += A[i] * B[j];
  38.     for(int i = 1; i <= C[0]; ++i)
  39.     {
  40.         C[i] += T;
  41.         T = C[i] / 10;
  42.         C[i] %= 10;
  43.  
  44.     }
  45.     if(T)
  46.         C[ ++C[0] ] = T;
  47. }
  48. ll logpow(ll a, ll b)
  49. {
  50.     ll sol = 1;
  51.     while(b)
  52.     {
  53.         if(b & 1)
  54.             sol = (sol * a) % mod;
  55.         a = (a * a) % mod;
  56.         b >>= 1;
  57.     }
  58.     return sol;
  59. }
  60.  
  61. void afisM(mare A)
  62. {
  63.     for(int i = A[0]; i >= 1; --i)
  64.         g << A[i];
  65.     g << '\n';
  66. }
  67.  
  68. void expo(mare A, ll b)
  69. {
  70.     mare R, aux, aux2;
  71.     atrib(R, 1);
  72.     while(b)
  73.     {
  74.         if(b & 1)
  75.         {
  76.             multi(R, A, aux);
  77.             atribM(aux, R);
  78.         }
  79.         atribM(A, aux);
  80.         multi(A, aux, aux2);
  81.         atribM(aux2, A);
  82.         b >>= 1;
  83.     }
  84.     atribM(R, A);
  85. }
  86.  
  87. void multint(mare A, ll x)
  88. {
  89.     ll T = 0;
  90.     for(int i = 1; i <= A[0]; ++i)
  91.     {
  92.         A[i] = A[i] * x + T;
  93.         T = A[i] / 10;
  94.         A[i] %= 10;
  95.     }
  96.     while (T)
  97.     {
  98.         A[ ++A[0] ] = T % 10;
  99.         T /= 10;
  100.     }
  101. }
  102. int main()
  103. {
  104.     f >> n;
  105.     if(n > 0)
  106.     {
  107.         if(n % 2 == 1)
  108.         {
  109.             ans = logpow(2, (n - 1) / 2);
  110.             ans = (3 * ans) % mod;
  111.         }
  112.         else
  113.         {
  114.             ans = logpow(2, n / 2);
  115.             ans = (2 * ans) % mod;
  116.         }
  117.         g << ans;
  118.     }
  119.     else
  120.     {
  121.         atrib(A, 2);
  122.         if(n % 2 == 1)
  123.         {
  124.             expo(A, (n - 1) / 2);
  125.             multint(A, 3);
  126.             afisM(A);
  127.         }
  128.         else
  129.         {
  130.             expo(A, (n) / 2);
  131.             multint(A, 2);
  132.             afisM(A);
  133.         }
  134.     }
  135.     f.close();
  136.     g.close();
  137.     return 0;
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement