#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; } |