#include <stdio.h>
#include <string>
using namespace std;
int licznik;
string wynik;
void doklej(int co);
void Sito(bool T[], int N)
{
for (int i=2; i*i<=N; i++)
{
if (T[i])
{
for (int j=2*i; j<=N; j+=i)
{
T[j]=false;
}
}
}
}
void faktoryzacja(int N)
{
bool *T;
T = new bool[N+1];
for (int i=2; i<N+2; i++)
{
T[i]=true;
}
if (N>1)
{
Sito(T, N);
for (int i=2; i<N+1; i++)
{
if(T[i])
{
while(N%i==0)
{
N=N/i;
doklej(i);
}
}
}
}
delete [] T;
}
void doklej(int co)
{
if(!wynik.empty()) wynik+="*";
wynik+="(";
for(int i=1;i<=co;i++)
{
wynik+="1";
if(i!=co) wynik+="+";
licznik++;
}
wynik+=")";
}
int main()
{
int T;
scanf("%i",&T);
while(T--)
{
licznik=0;
wynik.erase();
int k;
scanf("%i",&k);
faktoryzacja(k);
if(licznik<=100)printf("%s\n", wynik.c_str());
else printf("NIE\n");
}
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 73 74 75 76 | #include <stdio.h> #include <string> using namespace std; int licznik; string wynik; void doklej(int co); void Sito(bool T[], int N) { for (int i=2; i*i<=N; i++) { if (T[i]) { for (int j=2*i; j<=N; j+=i) { T[j]=false; } } } } void faktoryzacja(int N) { bool *T; T = new bool[N+1]; for (int i=2; i<N+2; i++) { T[i]=true; } if (N>1) { Sito(T, N); for (int i=2; i<N+1; i++) { if(T[i]) { while(N%i==0) { N=N/i; doklej(i); } } } } delete [] T; } void doklej(int co) { if(!wynik.empty()) wynik+="*"; wynik+="("; for(int i=1;i<=co;i++) { wynik+="1"; if(i!=co) wynik+="+"; licznik++; } wynik+=")"; } int main() { int T; scanf("%i",&T); while(T--) { licznik=0; wynik.erase(); int k; scanf("%i",&k); faktoryzacja(k); if(licznik<=100)printf("%s\n", wynik.c_str()); else printf("NIE\n"); } return 0; } |
English