Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <set>
- #include <vector>
- #include <utility>
- #include <iterator>
- #include <limits>
- #include <numeric>
- #include <cmath>
- #include <variant>
- #include <string>
- // #include "src/Polynomial.cpp"
- #include <boost/math/tools/polynomial.hpp>
- // #include <iomanip>
- // #include <iostream>
- // #include <string>
- // #include <string_view>
- // #include <type_traits>
- #define INT_SIZE 128
- #define INFINTY std::numeric_limits<int>::max()
- using basis_coefficients = std::vector<std::pair<double, double>>;
- using basis_polynomials = std::vector<std::vector<double>>;
- using coefs = std::vector<double>;
- using binomial_coefs = std::pair<double, double>;
- using namespace std;
- using namespace boost::math;
- using namespace boost::math::tools; // for polynomial
- using boost::lexical_cast;
- // variant<bool, basis_polynomials> get_coefficients(double _pl, coefs _xi)
- // {
- // if(_xi.size() != set(_xi.begin(), _xi.end()).size())
- // return false;
- // double n = _xi.size();
- // // for(int i = 0; i < _xi.size(); ++i){
- // // cout << _xi[i] << ' ';
- // // }
- // // cout << '\n';
- // basis_polynomials coefficients(n, coefs(2));
- // for (double i = 0; i < n; ++i)
- // {
- // if (i == _pl)
- // {
- // coefficients[i][0] = INFINTY;
- // coefficients[i][1] = INFINTY;
- // }
- // else
- // {
- // if(_xi[_pl] - _xi[i] == 0){
- // for(int j = 0; j < _xi.size(); ++j){
- // cout << _xi[j] << ' ';
- // }
- // cout << '\n';
- // }
- // coefficients[i][0] = 1 / (_xi[_pl] - _xi[i]);
- // coefficients[i][1] = -_xi[i] / (_xi[_pl] - _xi[i]);
- // }
- // }
- // basis_polynomials filtered_coefficients(n - 1, coefs(2));
- // double j = 0;
- // for (double i = 0; i < n; ++i)
- // {
- // if (coefficients[i][0] != INFINTY)
- // {
- // filtered_coefficients[j][0] = coefficients[i][1];
- // filtered_coefficients[j][1] = coefficients[i][0];
- // j++;
- // }
- // }
- // return filtered_coefficients;
- // }
- // // coefs polynomialTimesPolynomial(coefs x, coefs y)
- // // {
- // // double n = x.size() + y.size() - 1;
- // // coefs result(n, double(0));
- // // for (double i = 0; i < x.size(); ++i)
- // // {
- // // for (double j = 0; j < y.size(); ++j)
- // // {
- // // result[i + j] += x[i] * y[j];
- // // }
- // // }
- // // return result;
- // // }
- // // coefs calculateBasisLagrangePolynomial(basis_polynomials filtered_coefs)
- // // {
- // // double n = filtered_coefs.size();
- // // coefs result(n + 1, double(0));
- // // coefs tmp;
- // // if (n == 1)
- // // tmp = filtered_coefs[0];
- // // else
- // // tmp = polynomialTimesPolynomial(filtered_coefs[0], filtered_coefs[1]);
- // // for (double i = 0; i < tmp.size(); ++i)
- // // result[i] = tmp[i];
- // // for (double i = 2; i < filtered_coefs.size(); ++i)
- // // {
- // // coefs tmp = polynomialTimesPolynomial(result, filtered_coefs[i]);
- // // for (double j = 0; j < tmp.size(); ++j)
- // // result[j] = tmp[j];
- // // }
- // // return result;
- // // }
- // // basis_polynomials calculateAllBasisLagrangePolynomial(coefs x)
- // // {
- // // double n = x.size();
- // // basis_polynomials result;
- // // for (double pl = 0; pl < n; ++pl)
- // // result.push_back(calculateBasisLagrangePolynomial(get_coefficients(pl, x)));
- // // return result;
- // // }
- // variant<bool, basis_polynomials> get_polynomial_l(coefs _xi)
- // {
- // variant<bool, vector<vector<int>>> ans;
- // int n = _xi.size();
- // basis_polynomials pli(n, coefs(n));
- // for (double pl = 0; pl < n; ++pl)
- // {
- // variant<bool, basis_polynomials> check = get_coefficients(pl, _xi);
- // if(holds_alternative<bool>(check))
- // return false;
- // basis_polynomials coefficients = get<basis_polynomials>(check);
- // for (double i = 1; i < n - 1; ++i)
- // {
- // if (i == 1)
- // {
- // pli[pl][0] = coefficients[i - 1][0] * coefficients[i][0];
- // pli[pl][1] = coefficients[i - 1][1] * coefficients[i][0] + coefficients[i][1] * coefficients[i - 1][0];
- // pli[pl][2] = coefficients[i - 1][1] * coefficients[i][1];
- // }
- // else
- // {
- // coefs clone_pli(n, double(0));
- // for (double val = 0; val < n; ++val)
- // clone_pli[val] = pli[pl][val];
- // coefs zeros_pli(n, double(0));
- // double product_1;
- // double product_2;
- // for (double j = 0; j < n - 1; j++)
- // {
- // product_1 = clone_pli[j] * coefficients[i][0];
- // product_2 = clone_pli[j] * coefficients[i][1];
- // zeros_pli[j] += product_1;
- // zeros_pli[j + 1] += product_2;
- // }
- // for (double val = 0; val < n; ++val)
- // pli[pl][val] = zeros_pli[val];
- // }
- // }
- // }
- // cout << pli.size() << '\n';
- // for(int i = 0; i < pli.size(); ++i){
- // for(int j = 0; j < pli[i].size(); ++j){
- // cout << pli[i][j] << ", ";
- // }
- // cout << " | ";
- // }
- // cout << "-> ";
- // // vector<vector<int>> res;
- // // int check = pli[0].size();
- // // for(size_t i = 0; i < pli.size(); ++i){
- // // vector<int> tmp_vec;
- // // for(size_t j = 0; j < pli[i].size(); ++j){
- // // double integerPart;
- // // double fractionalPart = modf(pli[i][j], &integerPart);
- // // if(fractionalPart == 0.0){
- // // // cout << "int " <<integerPart << '\n';
- // // int tmp = static_cast<int>(integerPart);
- // // // res[i][j] = tmp;
- // // tmp_vec.push_back(tmp);
- // // }
- // // if(tmp_vec.size() == check){
- // // return false;
- // // }
- // // }
- // // }
- // // for(int i = 0; i < res.size(); ++i){
- // // for(int j = 0; j < res[i].size(); ++j){
- // // cout << res[i][j] << ' ';
- // // }
- // // cout << '\n';
- // // }
- // // if(res.size() == 0)
- // // return false;
- // return pli;
- // }
- // using int_coefs = vector<vector<int>>;
- // variant<bool, polynomial<int>> get_polynomial(coefs xi, coefs _yi)
- // {
- // variant<bool, polynomial<int>> ans;
- // double n = xi.size();
- // basis_polynomials polynomial_l;
- // bool bres;
- // variant<bool, basis_polynomials> check = get_polynomial_l(xi);
- // if(holds_alternative<bool>(check)){
- // bres = get<bool>(check);
- // return false;
- // }
- // polynomial_l = get<basis_polynomials>(check);
- // for (double i = 0; i < n; ++i)
- // {
- // for (double j = 0; j < n; ++j)
- // polynomial_l[i][j] *= _yi[i];
- // }
- // vector<double> Lagrange(n, double(0));
- // for (double i = 0; i < n; ++i)
- // {
- // for (double j = 0; j < n; ++j)
- // Lagrange[i] += polynomial_l[j][i];
- // }
- // for(int i = 0; i < Lagrange.size(); ++i){
- // cout << Lagrange[i] << ' ';
- // }
- // cout << '\n';
- // vector<int> res;
- // for(size_t i = 0; i < Lagrange.size(); ++i){
- // double integerPart;
- // double fractionalPart = modf(Lagrange[i], &integerPart);
- // if(fractionalPart == 0.0){
- // res.push_back(static_cast<int>(Lagrange[i]));
- // } else{
- // return false;
- // }
- // }
- // // polynomial<int> res = polynomial<int>(Lagrange);
- // return polynomial<int> {res};
- // }
- basis_polynomials get_coefficients(double _pl, coefs _xi){
- double n = _xi.size();
- basis_polynomials coefficients(n, coefs(2));
- for(double i = 0; i < n; ++i){
- if (i == _pl){
- coefficients[i][0] = INFINTY;
- coefficients[i][1] = INFINTY;
- } else {
- coefficients[i][0] = 1 / (_xi[_pl] - _xi[i]);
- coefficients[i][1] = -_xi[i] / (_xi[_pl] - _xi[i]);
- }
- }
- basis_polynomials filtered_coefficients(n - 1, coefs(2));
- double j = 0;
- for(double i = 0; i < n; ++i){
- if(coefficients[i][0] != INFINTY){
- filtered_coefficients[j][0] = coefficients[i][1];
- filtered_coefficients[j][1] = coefficients[i][0];
- j++;
- }
- }
- return filtered_coefficients;
- }
- coefs polynomialTimesPolynomial(coefs x, coefs y){
- double n = x.size() + y.size() - 1;
- coefs result(n, double(0));
- for(double i = 0; i < x.size(); ++i){
- for(double j = 0; j < y.size(); ++j){
- result[i + j] += x[i] * y[j];
- }
- }
- return result;
- }
- coefs calculateBasisLagrangePolynomial(basis_polynomials filtered_coefs){
- double n = filtered_coefs.size();
- coefs result(n + 1, double(0));
- coefs tmp;
- if(n == 1)
- tmp = filtered_coefs[0];
- else
- tmp = polynomialTimesPolynomial(filtered_coefs[0], filtered_coefs[1]);
- for(double i = 0; i < tmp.size(); ++i)
- result[i] = tmp[i];
- for(double i = 2; i < filtered_coefs.size(); ++i){
- coefs tmp = polynomialTimesPolynomial(result, filtered_coefs[i]);
- for(double j = 0; j < tmp.size(); ++j)
- result[j] = tmp[j];
- }
- return result;
- }
- basis_polynomials calculateAllBasisLagrangePolynomial(coefs x){
- double n = x.size();
- basis_polynomials result;
- for(double pl = 0; pl < n; ++pl)
- result.push_back(calculateBasisLagrangePolynomial(get_coefficients(pl, x)));
- return result;
- }
- basis_polynomials get_polynomial_l(coefs _xi){
- double n = _xi.size();
- basis_polynomials pli(n, coefs(n));
- for(double pl = 0; pl < n; ++pl){
- basis_polynomials coefficients = get_coefficients(pl, _xi);
- for(double i = 1; i < n - 1; ++i){
- if(i == 1){
- pli[pl][0] = coefficients[i - 1][0] * coefficients[i][0];
- pli[pl][1] = coefficients[i - 1][1] * coefficients[i][0] + coefficients[i][1] * coefficients[i - 1][0];
- pli[pl][2] = coefficients[i - 1][1] * coefficients[i][1];
- } else{
- coefs clone_pli(n, double(0));
- for(double val = 0; val < n; ++val)
- clone_pli[val] = pli[pl][val];
- coefs zeros_pli(n, double(0));
- double product_1;
- double product_2;
- for(double j = 0; j < n - 1; j++){
- product_1 = clone_pli[j] * coefficients[i][0];
- product_2 = clone_pli[j] * coefficients[i][1];
- zeros_pli[j] += product_1;
- zeros_pli[j + 1] += product_2;
- }
- for(double val = 0; val < n; ++val)
- pli[pl][val] = zeros_pli[val];
- }
- }
- }
- return pli;
- }
- coefs get_polynomial(coefs _xi, coefs _yi){
- double n = _xi.size();
- basis_polynomials polynomial_l = get_polynomial_l(_xi);
- for(double i = 0; i < n; ++i){
- for(double j = 0; j < n; ++j)
- polynomial_l[i][j] *= _yi[i];
- }
- coefs Lagrange(n, double(0));
- for(double i = 0; i < n; ++i){
- for(double j = 0; j < n; ++j)
- Lagrange[i] += polynomial_l[j][i];
- }
- return Lagrange;
- }
- bool IsPrime(const int n)
- {
- for (int i = 2; i * i <= n; i++)
- if (n % i == 0)
- return false;
- return n > 1;
- }
- set<int> toPrimeNumbers(int num)
- {
- num = abs(num);
- set<int> nums;
- if (num == 0)
- {
- return nums;
- }
- if (IsPrime(num))
- {
- nums.insert(num);
- return nums;
- }
- nums.insert(num);
- nums.insert(1);
- for (size_t i = 2; i * i <= num; ++i)
- {
- if (num % i == 0 && IsPrime(i))
- {
- nums.insert(i);
- nums.insert(num / i);
- }
- }
- return nums;
- }
- int gcd_n(const std::vector<int>& val) {
- if (val.empty())
- return -1;
- if (val.size() == 1)
- return val[0];
- vector<int> values;
- for(int i = 0; i < val.size(); ++i){
- if(val[i] != 0){
- values.push_back(val[i]);
- }
- }
- int gcd_value = gcd(values[0], values[1]);
- for (int i = 2; i < values.size(); ++i) {
- gcd_value = gcd(gcd_value, values[i]);
- }
- return gcd_value;
- }
- pair<int, polynomial<int>> ContPrim(polynomial<int> f) {
- if (f.data().at(0) == 0 && f.size() == 1) {
- return make_pair(0, polynomial<int>({0}));
- } else {
- // Get the coefficients of the polynomial
- vector<int> cl = f.data();
- // Compute the greatest common divisor of the coefficients
- int cf = gcd_n(cl);
- for(size_t i = 0; i <= f.degree(); ++i){
- cl[i] /= cf;
- }
- f = polynomial<int>(cl);
- return make_pair(cf, f);
- }
- }
- set<pair<int, int>> CartesianS(set<int> A, set<int> B)
- {
- set<pair<int, int>> AxB;
- for (int a : A)
- {
- for (int b : B)
- {
- AxB.insert(make_pair(a, b));
- }
- }
- return AxB;
- }
- vector<vector<int>> CartesianSL(set<vector<int>> A, set<vector<int>> B)
- {
- vector<vector<int>> AxB;
- for (const vector<int> &a : A)
- {
- for (const vector<int> &b : B)
- {
- AxB.push_back(vector<int>(a.begin(), a.end()));
- AxB.back().insert(AxB.back().end(), b.begin(), b.end());
- }
- }
- return AxB;
- }
- set<vector<int>> SetOfLists(set<int> A)
- {
- set<vector<int>> B;
- for (int a : A)
- {
- B.insert({a});
- }
- return B;
- }
- set<vector<int>> CartesianLS(vector<set<int>> U)
- {
- int n = U.size();
- if (n == 0)
- {
- return {};
- }
- int N = 1;
- vector<set<vector<int>>> V(n);
- for (int i = 0; i < n; i++)
- {
- N *= U[i].size();
- V[i] = SetOfLists(U[i]);
- }
- if (N == 0)
- {
- return {};
- }
- set<vector<int>> P = V[0];
- for (int i = 1; i < n; i++)
- {
- set<vector<int>> temp;
- for (const vector<int> &p : P)
- {
- for (const vector<int> &v : V[i])
- {
- vector<int> new_p = p;
- new_p.insert(new_p.end(), v.begin(), v.end());
- temp.insert(new_p);
- }
- }
- P = temp;
- }
- return P;
- }
- // vector<int> DIV(vector<int> coefficients) {
- // while (coefficients.back() == 0) {
- // coefficients.pop_back();
- // }
- // return coefficients;
- // }
- // vector<int> QUO(vector<int> dividend, vector<int> divisor) {
- // int div_size = divisor.size();
- // int dif = dividend.size() - div_size + 1;
- // for (int i = 0; i < dif; i++) {
- // int coef = dividend[i] / divisor[0];
- // for (int j = 0; j < div_size; j++) {
- // dividend[i + j] -= coef * divisor[j];
- // }
- // }
- // return DIV(dividend);
- // }
- void printVector(const vector<int> &v)
- {
- cout << "[";
- for (int i = 0; i < v.size(); ++i)
- {
- cout << v[i];
- if (i != v.size() - 1)
- {
- cout << ", ";
- }
- }
- cout << "]";
- }
- void printSet(const set<int> &A)
- {
- copy(A.begin(), A.end(), ostream_iterator<int>(cout, " "));
- }
- struct Kroneker{
- int cf;
- polynomial<int> prf;
- bool driven;
- polynomial<int> x_a;
- polynomial<int> quo;
- };
- set<int> divisors(int a) {
- set<int> divisors;
- if (a == 0) {
- cout << "All integers divide zero!";
- return divisors;
- }
- divisors.insert(-1);
- divisors.insert(1);
- divisors.insert(-a);
- divisors.insert(a);
- for (int k = 2; k <= floor(abs(a) / 2); ++k) {
- if (a % k == 0) {
- divisors.insert(a / k);
- divisors.insert(-a / k);
- divisors.insert(-k);
- divisors.insert(k);
- }
- }
- return divisors;
- }
- int get_func_val(polynomial<int> f, int xi){
- int res = f[0];
- for(size_t i = 1; i <= f.degree(); ++i){
- res += f[i] * pow(xi, i);
- }
- return res;
- }
- variant<bool, polynomial<int>> type_check(coefs& f){
- vector<int> res;
- for(size_t i = 0; i < f.size(); ++i){
- double integerPart;
- double fractionalPart = modf(f[i], &integerPart);
- if(fractionalPart == 0.0){
- res.push_back(static_cast<int>(f[i]));
- } else{
- return false;
- }
- }
- // polynomial<int> res = polynomial<int>(Lagrange);
- return polynomial<int> {res};
- }
- struct Kroneker kroneker(polynomial<int> f){
- int n = f.degree();
- struct Kroneker ans;
- if(n == 0){
- ans.cf = abs(f[0]);
- return ans;
- }
- pair<int, polynomial<int>> tmp = ContPrim(f);
- ans.cf = tmp.first;
- ans.prf = tmp.second;
- // cout << n << '\n';
- int m = n / 2;
- if(n <= 1){
- ans.driven = true;
- ans.x_a = ans.prf;
- ans.quo = polynomial<int>(1);
- return ans;
- }
- vector<int> x(m, 0);
- vector<int> y(m, 0);
- vector<set<int>> DY;
- for(size_t i = 0; i <= m; ++i){
- x[i] = i;
- y[i] = get_func_val(ans.prf, x[i]);
- int tmp = get_func_val(ans.prf, -x[i]);
- if(tmp == 0 || y[i] == 0){
- polynomial<int> x_a = y[i] == 0 ? polynomial<int>({-x[i], 1}) : polynomial<int>({x[i], 1});
- polynomial<int> quo = quotient_remainder(ans.prf, x_a).first; // возращается пара, возможен нецелочисленное деление
- ans.driven = false;
- // cout << quo << '\n';
- ans.x_a = x_a;
- ans.quo = quo;
- return ans;
- }
- DY.push_back(divisors(y[i]));
- }
- set<vector<int>> M = CartesianLS(DY);
- vector<vector<double>> f_values;
- vector<vector<double>> vec_M;
- for(const auto& mu : M){
- vector<double> mu_values;
- vector<double> args;
- for(int i = 0; i < mu.size(); ++i){
- mu_values.push_back(static_cast<double>(mu[i]));
- args.push_back(static_cast<double>(x[i]));
- }
- f_values.push_back(mu_values);
- vec_M.push_back(args);
- }
- int count = 0;
- for(size_t i = 0; i < vec_M.size(); ++i){
- coefs g = get_polynomial(vec_M[i], f_values[i]);
- // cout << count++ << '\n';
- variant<bool, polynomial<int>> check = type_check(g);
- polynomial<int> h;
- if(holds_alternative<polynomial<int>>(check)){
- h = get<polynomial<int>>(check);
- if(h == polynomial<int>(0)){
- // cout << h << '\n';
- continue;
- }
- if(h[h.degree()] > ans.prf[ans.prf.degree()]){
- continue;
- }
- // cout << ans.prf << '\n';
- // cout << h << '\n';
- if(h[h.degree()] < 0){
- h *= -1;
- }
- // cout << h << '\n';
- pair<polynomial<double>, polynomial<double>> tmp = quotient_remainder(ans.prf, h);
- variant<bool, polynomial<int>> second_check = type_check(tmp.first.data());
- if(holds_alternative<bool>(second_check)){
- continue;
- }
- polynomial<int> res = get<polynomial<int>>(second_check);
- if(h.degree() >= 1 && tmp.second == polynomial<double>(0)){
- ans.driven = false;
- ans.x_a = h;
- ans.quo = ContPrim(res).second;
- return ans;
- }
- }else{
- continue;
- }
- }
- ans.driven = true;
- ans.x_a = ans.prf;
- ans.quo = polynomial<int>(1);
- return ans;
- }
- struct Kroneker kronekerIRR(polynomial<int> f){
- Kroneker kr = kroneker(f);
- if(kr.driven){
- return kr;
- }
- polynomial<int> h = kr.x_a;
- while(!kroneker(h).driven){
- // cout << h << '\n';
- h = kroneker(h).x_a;
- }
- kr.driven = false;
- kr.x_a = h;
- kr.quo = ContPrim(quotient_remainder(kr.prf, h).first).second;
- // kr.quo = quotient_remainder(kr.prf, h).first;
- return kr;
- }
- using kronekerFactsValue = pair<int, vector<pair<polynomial<int>, int>>>;
- int ListSearch(vector<polynomial<int>>& list, polynomial<int> target) {
- auto it = find(list.begin(), list.end(), target);
- if (it != list.end()) {
- return it - list.begin(); // +1 because Maple uses 1-based indexing
- } else {
- return -1;
- }
- }
- int sum(vector<int>& vec){
- int res = 0;
- for(const auto& it : vec){
- res += it;
- }
- return res;
- }
- variant<polynomial<int>, kronekerFactsValue> kronekerFacts(polynomial<int> f){
- int n = f.degree();
- if(n <= 1){
- return f;
- }
- int scal;
- polynomial<int> prf;
- pair<int, polynomial<int>> tmp_cont = ContPrim(f);
- scal = tmp_cont.first;
- prf = tmp_cont.second;
- struct Kroneker kr = kronekerIRR(prf);
- polynomial<int> g = kr.x_a;
- polynomial<int> h = kr.quo;
- vector<polynomial<int>> irr = {g};
- vector<int> mlt = {1};
- cout << g << '\n';
- cout << h << '\n';
- // return f;
- while(h != polynomial<int>(1)){
- kr = kronekerIRR(h);
- g = kr.x_a;
- h = kr.quo;
- cout << g << '\n';
- cout << h << '\n';
- auto k = ListSearch(irr, g);
- // cout << k << '\n';
- if (k == -1) {
- irr.push_back(g);
- mlt.push_back(1);
- } else {
- mlt[k] += 1;
- }
- }
- kronekerFactsValue ans;
- for(size_t i = 0; i < irr.size(); ++i){
- ans.second.push_back(make_pair(irr[i], mlt[i]));
- }
- ans.first = scal;
- return ans;
- }
- int main0()
- {
- std::cout << "Using Boost "
- << BOOST_VERSION / 100000 << "." // major version
- << BOOST_VERSION / 100 % 1000 << "." // minor version
- << BOOST_VERSION % 100 // patch level
- << std::endl;
- // vector<set<int>> U = {{1, 2}, {3, 4, 5, 7}, {8, 9}}; // Пример списка множеств U
- // set<vector<int>> result = CartesianLS(U);
- // cout << "Cartesian product of U: ";
- // for (const vector<int> &list : result)
- // {
- // printVector(list);
- // cout << " ";
- // }
- // cout << endl;
- return 0;
- }
- int main1()
- {
- set<int> A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // Пример множества A
- set<vector<int>> result = SetOfLists(A);
- cout << "Set of lists B: ";
- for (const vector<int> &list : result)
- {
- printVector(list);
- cout << " ";
- }
- cout << endl;
- return 0;
- }
- int main2()
- {
- set<vector<int>> A = {{1}, {2}, {4}}; // Пример множества A
- set<vector<int>> B = {{1, 1}, {1, 2}, {2, 1}, {2, 2}}; // Пример множества B
- vector<vector<int>> result = CartesianSL(A, B);
- cout << "Cartesian product of A and B: ";
- for (const vector<int> &pair : result)
- {
- printVector(pair);
- cout << " ";
- }
- cout << endl;
- return 0;
- }
- int main3()
- {
- set<int> B = {1, 2, 3}; // Пример множества A
- set<int> A = {4, 5}; // Пример множества B
- set<pair<int, int>> result = CartesianS(A, B);
- cout << "Cartesian product of A and B: ";
- for (auto it = result.begin(); it != result.end(); ++it)
- {
- cout << "(" << it->first << ", " << it->second << ") ";
- }
- cout << endl;
- return 0;
- }
- int main4()
- {
- set<int> A;
- int a = -12;
- printSet(toPrimeNumbers(a));
- return 0;
- }
- int main(){
- polynomial<int> f({1, 2, 2, 3, 3, 2, 2, 1});
- polynomial<int> h({1, -1, 1});
- polynomial<int> g({1, 1});
- vector<polynomial<int>> tmp = {f, h, g, g, h};
- kronekerFactsValue ans;
- ans = get<kronekerFactsValue>(kronekerFacts(f));
- cout << ans.first << '\n';
- for(int i = 0; i < ans.second.size(); ++i){
- cout << ans.second[i].first << " " << ans.second[i].second << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement