#include #include #include #include using namespace std; unsigned int reduce (unsigned int base, int prime) { while (base % prime == 0) { base /= prime; } return base; } void rekur(unsigned int checked, unsigned int total, vector &primes, set & result, const unsigned int lower, const unsigned int upper, const unsigned int primesCount) { if(total <= upper) { if (total >= lower) { result.insert(total); } for (unsigned int i = checked; i < primesCount; i++) { rekur (i, total*primes[i], primes, result, lower, upper, primesCount); } } } bool solve () { unsigned int primeCount = 0; unsigned int lowerBound = 0; unsigned int upperBound = 0; // bool written=false; vector primes; cin >> primeCount; set results; if (primeCount == 0) { return false; } for (unsigned int i = 0; i < primeCount; i++) { int tmp; cin >> tmp; primes.push_back(tmp); } cin >> lowerBound; cin >> upperBound; for (unsigned int i = 0; i < primeCount; i++) { rekur (i, 1, primes, results, lowerBound, upperBound, primeCount); } vector writeout(results.begin(),results.end()); sort(writeout.begin(),writeout.end()); if(results.size()==0) cout << "none"; else{ bool written=false; for (vector::iterator it=writeout.begin();it!=writeout.end();it++){ if(written) { cout << ","<<*it; } else { cout << *it; written=true; } } } cout << endl; return true; } int main () { while (solve()); return 0; }