Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- typedef long long i64;
- using namespace std;
- int deconv(vector < i64 > &a, vector < i64 > &b, vector < i64 > &q, vector < i64 > &r, i64 n);
- vector<i64> nod (vector<i64> a, vector<i64> b, i64 n);
- void to_ring(i64 & x, i64 n);
- void printv(vector < i64 > &v, string str);
- void readv(vector <i64> &v, string str){
- cout<<str<<endl<<"Input degree and coefficients of polynom: ";
- int x, n;
- cin>>n;
- for(int i=0; i<=n; ++i){
- cin>>x;
- v.push_back(x);
- }
- cout<<endl;
- }
- int main()
- {
- vector < i64 > a, b, q, r;
- //auto answer = nod(a, b, 2);
- cout<< "a(x) = q(x)*b(x) +r(x)"<<endl;
- readv(a, "Input polynom a: ");
- readv(b, "Input polynom b: ");
- deconv(a,b,q,r,4);
- printv(a, "Polynom a: ");
- printv(b, "Polynom b: ");
- printv(q, "Polynom q: ");
- printv(r, "Polynom r: ");
- // printv(answer);
- }
- vector<i64> nod (vector<i64> a, vector<i64> b, i64 n){
- vector<i64> q, r;
- deconv(a, b, q, r, n);
- do {
- a = b;
- b = r;
- deconv (a, b, q, r, n);
- } while (r.front() != 0);
- return b;
- }
- void to_ring(i64 & x, i64 n){
- if ( n != 0 ){
- while (x>n) x -= n;
- while (x<0) x+= n;
- }
- }
- int deconv(vector < i64 > &a, vector < i64 > &b, vector < i64 > &q, vector < i64 > &r, i64 n)
- {
- q.clear();
- r = a;
- i64 limit = r.size() - b.size() + 1;
- for (i64 j = 0; j < limit; ++j)
- {
- q.push_back(r[j] / b.front());
- to_ring(q.back(), n);
- for (i64 i = 0; i < b.size(); ++i){
- r[i + j] -= q.back() * b[i];
- to_ring(r[i+j], n);
- }
- }
- i64 i;
- for (i=0; (i<r.size()-1) &&( r[i] == 0);++i);
- r.erase (r.begin(), r.begin()+i);
- return 0;
- }
- void printv(vector < i64 > &v, string str)
- {
- cout<<str;
- for (auto & i:v)
- cout << i << " ";
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement