#include <bits/stdc++.h> using namespace std; const int MAXP = 31623; int Z[MAXP + 1]; vector<int> LP; void generuj_liczby_pierwsze() { Z[0] = Z[1] = 1; for (int i = 2; i <= MAXP; ++i) { if (Z[i]) { continue; } LP.push_back(i); for (int j = i * i; j <= MAXP; j += i) { Z[j] = 1; } } } string generuj_rownanie(int n) { string r = ""; if (n < 6) { r = "1"; for (int i = 1; i < n; ++i) { r += "+1"; } return r; } int a = n; for (int i = 0; i < (int)LP.size() && LP[i] * LP[i] <= n && a > 1; ++i) { while (a % LP[i] == 0) { if (r.size() > 0) { r += "*"; } r += "(" + generuj_rownanie(LP[i]) + ")"; a /= LP[i]; } } if (a == n) { return "1+(" + generuj_rownanie(n - 1) + ")"; } if (a > 1) { if (r.size() > 0) { r += "*"; } r += "(" + generuj_rownanie(a) + ")"; } return r; } int main() { generuj_liczby_pierwsze(); int t, k; string r; scanf("%d", &t); while (t--) { scanf("%d", &k); r = generuj_rownanie(k); k = 0; for (int i = 0; i < (int)r.size(); ++i) { k += r[i] == '1'; } if (k > 100) { puts("NIE"); } else { puts(r.c_str()); } } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <bits/stdc++.h> using namespace std; const int MAXP = 31623; int Z[MAXP + 1]; vector<int> LP; void generuj_liczby_pierwsze() { Z[0] = Z[1] = 1; for (int i = 2; i <= MAXP; ++i) { if (Z[i]) { continue; } LP.push_back(i); for (int j = i * i; j <= MAXP; j += i) { Z[j] = 1; } } } string generuj_rownanie(int n) { string r = ""; if (n < 6) { r = "1"; for (int i = 1; i < n; ++i) { r += "+1"; } return r; } int a = n; for (int i = 0; i < (int)LP.size() && LP[i] * LP[i] <= n && a > 1; ++i) { while (a % LP[i] == 0) { if (r.size() > 0) { r += "*"; } r += "(" + generuj_rownanie(LP[i]) + ")"; a /= LP[i]; } } if (a == n) { return "1+(" + generuj_rownanie(n - 1) + ")"; } if (a > 1) { if (r.size() > 0) { r += "*"; } r += "(" + generuj_rownanie(a) + ")"; } return r; } int main() { generuj_liczby_pierwsze(); int t, k; string r; scanf("%d", &t); while (t--) { scanf("%d", &k); r = generuj_rownanie(k); k = 0; for (int i = 0; i < (int)r.size(); ++i) { k += r[i] == '1'; } if (k > 100) { puts("NIE"); } else { puts(r.c_str()); } } return 0; } |