Advertisement
dmkozyrev

nod of two polynoms

Apr 18th, 2015
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. typedef long long i64;
  4. using namespace std;
  5.  
  6. int deconv(vector < i64 > &a, vector < i64 > &b, vector < i64 > &q, vector < i64 > &r, i64 n);
  7. vector<i64> nod (vector<i64> a, vector<i64> b, i64 n);
  8. void to_ring(i64 & x, i64 n);
  9. void printv(vector < i64 > &v);
  10.  
  11. int main()
  12. {
  13.     vector < i64 > a{1,0,0,0,1,1,1,1,1};
  14.     vector < i64 > b{1,0,1,0,1,1,0,1};
  15.     vector < i64 > q, r;
  16.     auto answer = nod(a, b, 2);
  17.     printv(a);
  18.     printv(b);
  19.     //printv(q);
  20.     //printv(r);
  21.     printv(answer);
  22. }
  23.  
  24. vector<i64> nod (vector<i64> a, vector<i64> b, i64 n){
  25.     vector<i64> q, r;
  26.     deconv(a, b, q, r, n);
  27.     do {
  28.         a = b;
  29.         b = r;
  30.         deconv (a, b, q, r, n);
  31.     } while (r.front() != 0);
  32.     return b;
  33. }
  34.  
  35. void to_ring(i64 & x, i64 n){
  36.     if ( n != 0 ){
  37.     while (x>n) x -= n;
  38.     while (x<0) x+= n;
  39.     }
  40. }
  41.  
  42. int deconv(vector < i64 > &a, vector < i64 > &b, vector < i64 > &q, vector < i64 > &r, i64 n)
  43. {
  44.     q.clear();
  45.     r = a;
  46.     i64 limit = r.size() - b.size() + 1;
  47.     for (i64 j = 0; j < limit; ++j)
  48.     {
  49.         q.push_back(r[j] / b.front());
  50.         to_ring(q.back(), n);
  51.         for (i64 i = 0; i < b.size(); ++i){
  52.             r[i + j] -= q.back() * b[i];
  53.             to_ring(r[i+j], n);
  54.         }
  55.     }
  56.     i64 i;
  57.     for (i=0; (i<r.size()-1) &&( r[i] == 0);++i);
  58.     r.erase (r.begin(), r.begin()+i);
  59.     return 0;
  60. }
  61.  
  62. void printv(vector < i64 > &v)
  63. {
  64.   for (auto & i:v)
  65.         cout << i << " ";
  66.     cout << endl;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement