Advertisement
dmkozyrev

order

Apr 5th, 2015
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. typedef long long i64;
  5. using namespace std;
  6.  
  7. i64 nod (i64 a, i64 b);
  8. i64 eiler (i64 n);
  9. i64 order (i64 x, i64 n);
  10.  
  11. int main(){
  12.     i64 x, n;
  13.     cout << "Input x, n: ";
  14.     cin >> x >> n;
  15.     cout << "Order: " << order(x, n);
  16. }
  17.  
  18. i64 order (i64 x, i64 n){
  19.     i64 count = eiler(n);
  20.     i64 limit = sqrt(count);
  21.     for ( i64 i = 1; i <= count; ++i )
  22.         if ( count % i == 0 ){
  23.             i64 xi = pow(x, i);
  24.             if ( xi % n == 1 )
  25.                 return i;
  26.         }
  27.     i64 xi = pow(x, count);
  28.     if ( xi % n == 1 )
  29.         return count;
  30.     else
  31.         return 0;
  32. }
  33.  
  34. i64 eiler(i64 n){
  35.     i64 count = 0;
  36.     for (i64 i = 0; i < n; ++i)
  37.         if ( nod (i, n) == 1 )
  38.             ++count;
  39.     return count;
  40. }
  41.  
  42. i64 nod (i64 a, i64 b){
  43.     i64 temp;
  44.     while ( a % b != 0 ){
  45.         temp = a % b; a = b; b = temp;
  46.     }
  47.     return b;  
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement