Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<string>
- #include<vector>
- #include <time.h>
- #include<algorithm>
- using namespace std;
- bool chet = true;
- bool NEG = false;
- vector<int> MOD = {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9 };
- vector<vector<int>> deliteli = {{2}, {3}, {5}, {7}, {1, 1}, {3, 1}, {7, 1}, {9, 1}, {3, 2}, {9, 2}, {1, 3}, {7, 3}, {1, 4}, {3, 4}, {7, 4}, {3, 5},
- {9, 5}, {1, 6}, {7, 6}, {1,7}, {3, 7}, {9, 7}, {3, 8}, {9, 8}, {7,9}, {1, 0, 1}, {3,0,1}, {7,0,1}, {9,0,1}, {3,1,1}, {7,2,1}, {1,3,1},
- {7, 3,1}, {9,3,1}, {9,4,1}, {1,5,1}, {7,5,1}, {3,6,1}, {7,6,1}, {3,7,1}, {9,7,1}, {1,8,1}, {1,9,1}, {3,9,1}, {7,9,1}, {9,9,1}, {1,1,2}, {3,2,2},
- {7,2,2}, {9,2,2}, {3,3,2}, {9,3,2}, {1,4,2}, {1,5,2}, {7,5,2} };
- vector<vector<int>> bingenses;
- vector<vector<int>> gener;
- vector<vector<int>> gen1010;
- vector<vector<int>> gen1010CHET;
- vector<vector<int>> gen1010CHET1;
- vector<int> multy(vector<int> U, vector<int> V) {
- vector<int> W(U.size() + V.size() + 1);
- if (V.size() > U.size() || (V.size() == U.size() && V > U))
- swap(U, V);
- int m = V.size();
- U.push_back(0);
- int t;
- int i = 0, k = 0;
- for (int j = 0; j < m; j++)
- {
- for (int i = 0; i < U.size(); i++)
- {
- t = U[i] * V[j] + W[i + j] + k;
- W[i + j] = t % 10;
- k = t / 10;
- }
- }
- if (W.size() > 1) {
- int e = W.size() - 1;
- while (W[e] == 0 && W.size() > 1)
- {
- W.pop_back();
- e--;
- }
- }
- return W;
- }
- vector<int> diff(vector<int> U, vector<int> V) {
- int m = max(U.size(), V.size());
- if (U.size() > 1) {
- int e = U.size() - 1;
- while (U[e] == 0 && U.size() > 1)
- {
- U.pop_back();
- e--;
- }
- }
- if (V.size() > 1) {
- int e = V.size() - 1;
- while (V[e] == 0 && V.size() > 1)
- {
- V.pop_back();
- e--;
- }
- }
- reverse(U.begin(), U.end());
- reverse(V.begin(), V.end());
- if (V.size() > U.size() || (V.size() == U.size() && V > U))
- {
- swap(U, V);
- NEG = true;
- }
- reverse(U.begin(), U.end());
- reverse(V.begin(), V.end());
- if (V.size() < U.size())
- {
- int r = U.size() - V.size();
- for (int i = r; i > 0; i--)
- V.push_back(0);
- }
- vector<int> W;
- int k = 0;
- for (int j = 0; j < U.size(); j++)
- {
- W.push_back((U[j] - V[j] + k + 10) % 10);
- k = (U[j] - V[j] + k - 9) / 10;
- }
- for (int i = 0; i < m; i++)
- W.push_back(0);
- NEG = false;
- if (W.size() > 1) {
- int e = W.size() - 1;
- while (W[e] == 0 && W.size() > 1)
- {
- W.pop_back();
- e--;
- }
- }
- return W;
- }
- vector<int> diff1(vector<int> U, vector<int> V) {
- int m = max(U.size(), V.size());
- if (U.size() > 1) {
- int e = U.size() - 1;
- while (U[e] == 0 && U.size() > 1)
- {
- U.pop_back();
- e--;
- }
- }
- if (V.size() > 1) {
- int e = V.size() - 1;
- while (V[e] == 0 && V.size() > 1)
- {
- V.pop_back();
- e--;
- }
- }
- reverse(U.begin(), U.end());
- reverse(V.begin(), V.end());
- if (V.size() > U.size() || (V.size() == U.size() && V > U))
- {
- swap(U, V);
- NEG = true;
- }
- reverse(U.begin(), U.end());
- reverse(V.begin(), V.end());
- if (V.size() < U.size())
- {
- int r = U.size() - V.size();
- for (int i = r; i > 0; i--)
- V.push_back(0);
- }
- vector<int> W;
- int k = 0;
- for (int j = 0; j < U.size(); j++)
- {
- W.push_back((U[j] - V[j] + k + 10) % 10);
- k = (U[j] - V[j] + k - 9) / 10;
- }
- for (int i = 0; i < m; i++)
- W.push_back(0);
- return W;
- }
- vector<int> add(vector<int> U, vector<int> V) {
- int m = max(U.size(), V.size());
- if (U.size() > 1) {
- int e = U.size() - 1;
- while (U[e] == 0 && U.size() > 1)
- {
- U.pop_back();
- e--;
- }
- }
- if (V.size() > 1) {
- int e = V.size() - 1;
- while (V[e] == 0 && V.size() > 1)
- {
- V.pop_back();
- e--;
- }
- }
- if (V.size() > U.size())
- swap(U, V);
- vector<int> W;
- int k = 0;
- int r = U.size() - V.size();
- for (int i = r; i > 0; i--)
- V.push_back(0);
- for (int j = 0; j < U.size(); j++)
- {
- W.push_back((U[j] + V[j] + k) % 10);
- k = (U[j] + V[j] + k) / 10;
- }
- for (int i = 0; i < m; i++)
- W.push_back(0);
- return W;
- }
- vector<int> add1(vector<int> U, vector<int> V) {
- int m = max(U.size(), V.size());
- if (U.size() > 1) {
- int e = U.size() - 1;
- while (U[e] == 0 && U.size() > 1)
- {
- U.pop_back();
- e--;
- }
- }
- if (V.size() > 1) {
- int e = V.size() - 1;
- while (V[e] == 0 && V.size() > 1)
- {
- V.pop_back();
- e--;
- }
- }
- if (V.size() > U.size())
- swap(U, V);
- vector<int> W;
- int k = 0;
- int r = U.size() - V.size();
- for (int i = r; i > 0; i--)
- V.push_back(0);
- for (int j = 0; j < U.size(); j++)
- {
- W.push_back((U[j] + V[j] + k) % 10);
- k = (U[j] + V[j] + k) / 10;
- }
- if (k == 1)
- W.push_back(k);
- return W;
- }
- vector<int> diviz(vector<int> U, vector<int> V) {
- bool men = false;
- if (U[0] % 2 == 1)
- chet = false;
- if (U.size() < V.size() || (V.size() == U.size() && V[0] > U[0]))
- {
- vector<int> W;
- W.push_back(0);
- men = true;
- return W;
- }
- vector<int> W(U.size() + 1);
- if (!men)
- {
- int m = V.size();
- int cur, ost = 0;
- for (int j = U.size() - 1; j >= 0; j--)
- {
- cur = 10 * ost + U[j];
- W[j] = cur / V[0];
- ost = cur % V[0];
- }
- if (W.size() > 1) {
- int e = W.size() - 1;
- while (W[e] == 0 && W.size() > 1)
- {
- W.pop_back();
- e--;
- }
- }
- return W;
- }
- }
- vector<int> diviz1(vector<int> U, vector<int> V) {
- bool men = false;
- if (U.size() < V.size() || (V.size() == U.size() && V[0] > U[0]))
- {
- vector<int> W;
- W.push_back(0);
- men = true;
- return W;
- }
- vector<int> W(U.size() + 1);
- if (!men)
- {
- int m = V.size();
- int cur, ost = 0;
- for (int j = U.size() - 1; j >= 0; j--)
- {
- cur = 10 * ost + U[j];
- W[j] = cur / V[0];
- ost = cur % V[0];
- }
- if (W.size() > 1) {
- int e = W.size() - 1;
- while (W[e] == 0 && W.size() > 1)
- {
- W.pop_back();
- e--;
- }
- }
- return W;
- }
- }
- vector<int> divmod(vector<int> U, vector<int> V) {
- vector<int> MOD11;
- bool zer = false;
- if (U[0] == '0' && U.size() == 1)
- {
- zer = true;
- MOD11.push_back(0);
- return MOD11;
- }
- bool men = false;
- reverse(V.begin(), V.end());
- reverse(U.begin(), U.end());
- if (U.size() < V.size() || (V.size() == U.size() && V > U))
- {
- men = true;
- reverse(U.begin(), U.end());
- return U;
- }
- reverse(V.begin(), V.end());
- reverse(U.begin(), U.end());
- vector<int> W(U.size() + 1);
- if (!zer && !men)
- {
- int m = V.size();
- int cur, ost = 0;
- vector<int> Chastnoe(U.size());
- if (V.size() == 1) {
- for (int j = U.size() - 1; j >= 0; j--)
- {
- cur = 10 * ost + U[j];
- W[j] = cur / V[0];
- ost = cur % V[0];
- }
- MOD11.push_back(ost);
- return MOD11;
- }
- else {
- int ms = U.size() - V.size();
- int d = 10 / (V[V.size() - 1] + 1);
- vector<int> D;
- D.push_back(d);
- U = multy(U, D);
- V = multy(V, D);
- if (ms + V.size() > U.size() - 1)
- U.push_back(0);
- for (int j = ms; j >= 0; j--)
- {
- int qk = (U[j + V.size()] * 10 + U[j + V.size() - 1]) / V[V.size() - 1];
- int rk = (U[j + V.size()] * 10 + U[j + V.size() - 1]) % V[V.size() - 1];
- step1: if (qk == 10 || qk*V[V.size() - 2] > 10 * rk + U[j + V.size() - 2])
- {
- qk--;
- rk += V[V.size() - 1];
- if (rk < 10)
- goto step1;
- }
- vector<int> QK;
- QK.push_back(qk);
- int s = j + V.size();
- vector<int> chu(V.size() + 1);
- vector<int> raz(V.size() + 1);
- for (int f = s; f >= j; f--)
- chu[f - j] = U[f];
- vector<int> chupa;
- for (int e = 0; e <= V.size(); e++)
- chupa.push_back(0);
- chupa.push_back(1);
- raz = diff1(chu, multy(QK, V));
- if (NEG)
- raz = diff1(chupa, raz);
- Chastnoe[j] = qk;
- if (NEG)
- {
- Chastnoe[j]--;
- raz = add(V, raz);
- NEG = false;
- }
- for (int f = s; f >= j; f--)
- U[f] = raz[f - j];
- }
- if (Chastnoe.size() > 1) {
- int e = Chastnoe.size() - 1;
- while (Chastnoe[e] == 0 && Chastnoe.size() > 1)
- {
- Chastnoe.pop_back();
- e--;
- }
- }
- vector<int>U2;
- for (int g = V.size() - 1; g >= 0; g--)
- U2.push_back(U[g]);
- reverse(U2.begin(), U2.end());
- vector<int> W2(U2.size());
- for (int z = U2.size() - 1; z >= 0; z--)
- {
- cur = 10 * ost + U2[z];
- W2[z] = cur / D[0];
- ost = cur % D[0];
- }
- if (W2.size() > 1) {
- int e = W2.size() - 1;
- while (W2[e] == 0 && W2.size() > 1)
- {
- W2.pop_back();
- e--;
- }
- }
- NEG = false;
- return W2;
- }
- }
- }
- vector<int> divch(vector<int> U, vector<int> V) {
- vector<int> MOD11;
- bool zer = false;
- if (U[0] == '0' && U.size() == 1)
- {
- zer = true;
- MOD11.push_back(0);
- return MOD11;
- }
- bool men = false;
- reverse(V.begin(), V.end());
- reverse(U.begin(), U.end());
- if (U.size() < V.size() || (V.size() == U.size() && V > U))
- {
- men = true;
- MOD11.push_back(0);
- return MOD11;
- }
- reverse(V.begin(), V.end());
- reverse(U.begin(), U.end());
- vector<int> W(U.size() + 1);
- if (!zer && !men)
- {
- int m = V.size();
- int cur, ost = 0;
- vector<int> Chastnoe(U.size());
- if (V.size() == 1) {
- for (int j = U.size() - 1; j >= 0; j--)
- {
- cur = 10 * ost + U[j];
- W[j] = cur / V[0];
- ost = cur % V[0];
- }
- if (W.size() > 1) {
- int e = W.size() - 1;
- while (W[e] == 0 && W.size() > 1)
- {
- W.pop_back();
- e--;
- }
- }
- return W;
- }
- else {
- int ms = U.size() - V.size();
- int d = 10 / (V[V.size() - 1] + 1);
- vector<int> D;
- D.push_back(d);
- U = multy(U, D);
- V = multy(V, D);
- if (ms + V.size() > U.size() - 1)
- U.push_back(0);
- for (int j = ms; j >= 0; j--)
- {
- int qk = (U[j + V.size()] * 10 + U[j + V.size() - 1]) / V[V.size() - 1];
- int rk = (U[j + V.size()] * 10 + U[j + V.size() - 1]) % V[V.size() - 1];
- step1: if (qk == 10 || qk*V[V.size() - 2] > 10 * rk + U[j + V.size() - 2])
- {
- qk--;
- rk += V[V.size() - 1];
- if (rk < 10)
- goto step1;
- }
- vector<int> QK;
- QK.push_back(qk);
- int s = j + V.size();
- vector<int> chu(V.size() + 1);
- vector<int> raz(V.size() + 1);
- for (int f = s; f >= j; f--)
- chu[f - j] = U[f];
- vector<int> chupa;
- for (int e = 0; e <= V.size(); e++)
- chupa.push_back(0);
- chupa.push_back(1);
- raz = diff1(chu, multy(QK, V));
- if (NEG)
- raz = diff1(chupa, raz);
- Chastnoe[j] = qk;
- if (NEG)
- {
- Chastnoe[j]--;
- raz = add(V, raz);
- NEG = false;
- }
- for (int f = s; f >= j; f--)
- U[f] = raz[f - j];
- }
- if (Chastnoe.size() > 1) {
- int e = Chastnoe.size() - 1;
- while (Chastnoe[e] == 0 && Chastnoe.size() > 1)
- {
- Chastnoe.pop_back();
- e--;
- }
- }
- NEG = false;
- return Chastnoe;
- }
- }
- }
- vector<int> stepmod(vector<int> U, vector<int> V, vector<int> mod1) {
- vector <int> Y;
- Y.push_back(1);
- vector<int> N = V;
- vector <int> Z = U;
- vector <int> del;
- del.push_back(2);
- while (!(N.size() == 1 && N[0] == 0))
- {
- N = diviz(N, del);
- if (chet) {
- Z = multy(Z, Z);
- Z = divmod(Z, mod1);
- }
- else {
- Y = multy(Y, Z);
- Y = divmod(Y, mod1);
- if (N.size() == 1 && N[0] == 0)
- break;
- Z = multy(Z, Z);
- Z = divmod(Z, mod1);
- chet = true;
- }
- }
- Y = divmod(Y, mod1);
- if (Y.size() > 1) {
- int e = Y.size() - 1;
- while (Y[e] == 0 && Y.size() > 1)
- {
- Y.pop_back();
- e--;
- }
- }
- chet = true;
- return Y;
- }
- vector<int> generate(int k) {
- vector<int> RND;
- step7:
- int et = rand();
- for (int i = 0; i < k; i++)
- {
- int rnd = rand();
- if (rnd < et)
- RND.push_back(1);
- else
- RND.push_back(0);
- }
- for (int i = 0; i < gener.size(); i++)
- if (RND == gener[i])
- {
- RND.clear();
- goto step7;
- }
- gener.push_back(RND);
- return RND;
- }
- vector<int> gen10(int k) {
- vector<int> RND;
- step9:
- int rnd = rand() % 9 + 1;
- RND.push_back(rnd);
- for (int i = 0; i < k - 1; i++)
- {
- int rnd2 = rand() % 10;
- RND.push_back(rnd2);
- }
- for (int i = 0; i < gen1010.size(); i++)
- if (RND == gen1010[i])
- {
- RND.clear();
- goto step9;
- }
- gen1010.push_back(RND);
- return RND;
- }
- vector<int> gen10CHET(int k) {
- vector<int> RND111;
- step9:
- for (int i = 0; i < k ; i++)
- {
- int rnd21 = rand() % 10;
- RND111.push_back(rnd21);
- }
- reverse(RND111.begin(), RND111.end());
- if (RND111.size() > 1) {
- int e = RND111.size() - 1;
- while (RND111[e] == 0 && RND111.size() > 1)
- {
- RND111.pop_back();
- e--;
- }
- }
- reverse(RND111.begin(), RND111.end());
- for (int i = 0; i < gen1010CHET.size(); i++)
- if (RND111 == gen1010CHET[i])
- {
- RND111.clear();
- goto step9;
- }
- gen1010CHET.push_back(RND111);
- return RND111;
- }
- vector<int> gen10CHET1(int k) {
- vector<int> RND111;
- step9:
- for (int i = 0; i < k; i++)
- {
- int rnd21 = rand() % 10;
- RND111.push_back(rnd21);
- }
- reverse(RND111.begin(), RND111.end());
- if (RND111.size() > 1) {
- int e = RND111.size() - 1;
- while (RND111[e] == 0 && RND111.size() > 1)
- {
- RND111.pop_back();
- e--;
- }
- }
- reverse(RND111.begin(), RND111.end());
- for (int i = 0; i < gen1010CHET1.size(); i++)
- if (RND111 == gen1010CHET1[i])
- {
- RND111.clear();
- goto step9;
- }
- gen1010CHET1.push_back(RND111);
- return RND111;
- }
- vector<int>perevod(vector<int> bingen) {
- int size = bingen.size();
- vector<int> genten(log2(size) + 1);
- vector <int> del;
- del.push_back(2);
- vector <int> stepen;
- for (int i = 0; i < size; i++)
- {
- int st = size - i - 1;
- string ST;
- ST = to_string(st);
- for (int j = ST.size() - 1; j >= 0; j--)
- {
- string step_str;
- step_str = ST.substr(j, 1);
- int step_ch = atoi(step_str.c_str());
- stepen.push_back(step_ch);
- }
- vector <int> bg;
- bg.push_back(bingen[i]);
- genten = add1(genten, multy(bg, stepmod(del, stepen, MOD)));
- bg.clear();
- stepen.clear();
- }
- if (genten.size() > 1) {
- int e = genten.size() - 1;
- while (genten[e] == 0 && genten.size() > 1)
- {
- genten.pop_back();
- e--;
- }
- }
- return genten;
- }
- bool comvec(vector<int> &V, vector<int> &U) {
- if (V.size() < U.size())
- return true;
- if (V.size() > U.size())
- return false;
- if (V == U)
- return false;
- for (int g = 0; g < V.size(); g++)
- {
- if (V[g] > U[g])
- return false;
- else {
- if (V[g] < U[g])
- return true;
- }
- }
- return true;
- }
- vector<int> binarprostgen(int &k) {
- vector<int> bingen;
- if (k == 1)
- {
- bingen.push_back(1);
- return bingen;
- }
- step5:
- bingen.push_back(1);
- for (int i = 0; i < k - 2; i++)
- {
- int rnd = rand() % 2;
- bingen.push_back(rnd);
- }
- bingen.push_back(1);
- for (int i = 0; i < bingenses.size(); i++)
- if (bingen == bingenses[i])
- {
- bingen.clear();
- goto step5;
- }
- bingenses.push_back(bingen);
- return bingen;
- }
- bool isprimedel(vector<int> genten) {
- if (genten.size() == 1 && (genten[0] == 0 || genten[0] == 1 || genten[0] == 2))
- return true;
- int cnt = 0;
- vector <int> nul;
- nul.push_back(0);
- for (int i = 1; i < deliteli.size(); i++)
- {
- if (divmod(genten, deliteli[i]) == nul)
- cnt++;
- }
- if (cnt > 1)
- return false;
- return true;
- }
- bool RabinMiller(vector<int> genten) {
- if (genten.size() == 1 && (genten[0] == 0 || genten[0] == 1 || genten[0] == 2))
- return true;
- vector <int> q;
- vector <int> a;
- a.push_back(0);
- int i;
- int count = 0;
- vector <int> ad;
- ad.push_back(1);
- vector <int> del;
- del.push_back(2);
- srand(time(NULL));
- if (genten != ad)
- {
- q = diff(genten, ad);
- do { q = divch(q, del); count++; } while (q[0] % 2 == 0);
- vector <int> I;
- I.push_back(1);
- vector <int> Imax;
- Imax = diff(genten, ad);
- vector <int> I30;
- I30.push_back(3);
- I30.push_back(0);
- if (comvec(I30, Imax))
- Imax = I30;
- for (I; comvec(I, Imax); I = add1(I, ad))
- {
- int s = pow(2, genten.size());
- vector<int>raz = diff(genten, ad);
- reverse(raz.begin(), raz.end());
- while (comvec(a, ad) || comvec(raz, a)) {
- a = gen10CHET1(diff(genten, ad).size());
- }
- reverse(a.begin(), a.end());
- if (stepmod(a, diff(genten, ad), genten) != ad)
- {
- return false;
- }
- a = stepmod(a, q, genten);
- if (a != ad)
- {
- for (int e = 0; e < count; e++)
- if (a != ad && a != diff(genten, ad))
- a = divmod(multy(a, a), genten);
- if (a == ad)
- {
- return false;
- }
- }
- a.clear();
- }
- return true;
- }
- else
- {
- return false;
- }
- }
- int main() {
- setlocale(LC_ALL, "Russian");
- string k;
- cin >> k;
- vector<int> K;
- int KK = atoi(k.c_str());
- int p = 0;
- while (k[p] == '0' && p < k.size())
- p++;
- if (p > 1)
- {
- cout << "Ошибка ввода. Больше одного нуля подряд вначале первого числа" << endl;
- system("pause");
- return 0;
- }
- else if (p == 1 && k.size() > 1)
- {
- cout << "Ошибка ввода. Ноль перед другими цифрами в первом числе с двумя знаками и более" << endl;
- system("pause");
- return 0;
- }
- if (KK < 4)
- {
- cout << "Ошибка ввода!" << endl;
- system("pause");
- return 0;
- }
- for (int i = k.size() - 1; i >= 0; i--)
- K.push_back(atoi(k.substr(i, 1).c_str()));
- vector <int> del;
- vector <int> K2;
- del.push_back(2);
- K2 = diviz1(K, del);
- vector <int> Q;
- vector<int> step2i;
- vector<int> step2i1;
- vector <int> ad;
- ad.push_back(1);
- KK /= 2;
- step2:
- Q = binarprostgen(KK);
- Q = perevod(Q);
- if (!isprimedel(Q))
- goto step2;
- else {
- if (!RabinMiller(Q))
- {
- gen1010CHET1.clear();
- goto step2;
- }
- }
- vector<int> POROG1;
- vector<int> POROG2;
- POROG1 = stepmod(del, diff(K, ad), MOD);
- POROG2 = stepmod(del, K, MOD);
- step2i1 = divch(diff(POROG1, ad), Q);
- step2i = divch(diff(POROG2, ad), Q);
- step2i = add1(step2i, ad);
- reverse(POROG1.begin(), POROG1.end());
- reverse(POROG2.begin(), POROG2.end());
- vector <int> S;
- S.push_back(1);
- vector <vector<int>> vecS;
- vector<int> SIZE;
- SIZE.push_back(vecS.size());
- vector<int> st1;
- st1 = step2i1;
- reverse(st1.begin(), st1.end());
- vector<int> st2 = step2i;
- reverse(st2.begin(), st2.end());
- vector <int> P;
- bool go = false;
- step69:
- S = gen10CHET(step2i.size());
- if ((!comvec(S, st1) && !comvec(st2, S)) && S[S.size() - 1] % 2 == 0)
- {
- vector<int> Snat;
- Snat = S;
- reverse(Snat.begin(), Snat.end());
- P = add1(multy(Q, Snat), ad);
- vector<int> V1, V2, V3;
- V1 = stepmod(add1(multy(del, Q), ad), del, MOD);
- reverse(V1.begin(), V1.end());
- V2 = stepmod(del, multy(Q, Snat), P);
- reverse(V2.begin(), V2.end());
- V3 = stepmod(del, Snat, P);
- reverse(V3.begin(), V3.end());
- reverse(P.begin(), P.end());
- if (comvec(P, V1) && (V2 == ad) && (V3 != ad) && comvec(P, POROG2) && comvec(POROG1, P))
- {
- for (int i = 0; i < P.size(); i++)
- cout << P[i];
- cout << endl;
- system("pause");
- return 0;
- }
- else {
- if (comvec(SIZE, diff(diff(step2i, step2i1), diviz1(diff(step2i, step2i1), del))))
- vecS.push_back(Snat);
- SIZE = add1(SIZE, ad);
- goto step69;
- }
- }
- else goto step69;
- if (!comvec(SIZE, diff(diff(step2i, step2i1), diviz1(diff(step2i, step2i1), del))))
- {
- bingenses.clear();
- gener.clear();
- gen1010CHET1.clear();
- gen1010CHET.clear();
- gen1010.clear();
- goto step2;
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement