Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <algorithm>
- #include <cmath>
- using namespace std;
- ifstream f("atestat.in");
- ofstream g("atestat.out");
- const int NMAX = 100001;
- int V[NMAX], N, nrMax;
- bool isPrime(int x){
- if(x == 2) return true;
- if(x%2==0) return false;
- for(int i = 3; i <= sqrt(x); i=i+i){
- if(x%i==0) return false;
- }
- return true;
- }
- int vizitat1[NMAX], vizitat2[NMAX];
- bool contineCifreVector(int x){
- int vectorCifre[NMAX], nrCifre = 0, save = x, Vfaradubluri[NMAX], Cifrefaradubluri[NMAX];
- for(int i = 0; i < NMAX; ++i) vectorCifre[i] = -1;
- while(x){
- vectorCifre[nrCifre] = x%10;
- x/=10;
- nrCifre++;
- }
- sort(vectorCifre, vectorCifre+nrCifre);
- int contor1 = 0, contor2 = 0;
- for(int i = 0; i < nrCifre; ++i){
- if(vizitat1[vectorCifre[i]] == 0){
- Cifrefaradubluri[contor1] = vectorCifre[i];
- contor1++;
- vizitat1[vectorCifre[i]] = 1;
- }
- }
- /* for(int i = 0; i < contor1; ++i) cout << Cifrefaradubluri[i] << " ";
- cout << "\n";*/
- for(int i = 0; i < N; ++i){
- if(vizitat2[V[i]] == 0){
- Vfaradubluri[contor2] = V[i];
- contor2++;
- vizitat2[V[i]] = 1;
- }
- }
- // int dif = abs(contor1-contor2);
- int q = 0;
- for(int i = 0; i < contor1; ++i){
- for(int j = 0; j < contor2; ++j){
- if(Cifrefaradubluri[i] != Vfaradubluri[j]) q++;
- }
- if(q >= contor2) return false;
- q = 0;
- }
- return true;
- }
- int main()
- {
- cin >> N;
- for(int i = 0; i < N; ++i) cin >> V[i];
- sort(V, V+N);
- for(int i = N; i >= 0; --i) nrMax = nrMax * 10 + V[i];
- // cout << nrMax << "\n";
- // cout << isPrime(12) << " " << isPrime(11); DEBUG pentru functia de prim
- // cout << contineCifreVector(225) << contineCifreVector(111); DEBUG pentru functia cu numerele
- for(int i = 1; i < nrMax; ++i){
- if(contineCifreVector(i) && isPrime(i)) cout << i << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement