#include #include #include #include #include using namespace std; typedef long long Number; int primesCount; vector numbers; vector primes; enum Ret { OK, BIG, SMALL }; Number low, high; Ret addNumber (Number num){ if (num < low) return SMALL; if (num > high) return BIG; numbers.push_back(num); return OK; } void mult (Number num, int startIndex){ vector::iterator iter, end; for (int index = startIndex; index < primesCount; ++index){ if (addNumber(num * primes[index]) == BIG) break; mult (num * primes[index], index); } } int main(int argc, char** argv){ primes.resize(11); while (true){ cin >> primesCount; if (primesCount == 0) break; for (int index = 0; index < primesCount; ++index) cin >> primes[index]; cin >> low >> high; numbers.clear(); addNumber(1); mult (1, 0); if (numbers.size() == 0) cout << "none\n"; else { sort(numbers.begin(), numbers.end()); vector::iterator iter = numbers.end();//unique (numbers.begin(), numbers.end()); --iter; copy (numbers.begin(), iter, ostream_iterator(cout, ",")); cout << *iter; cout << "\n"; } } cout << flush; return 0; } /* * using namespace std; typedef long long Number; set numbers; vector primes; enum Ret { OK, BIG, SMALL }; Number low, high; Ret addNumber (Number num){ if (num < low) return SMALL; if (num > high) return BIG; numbers.insert(num); return OK; } void mult (Number num){ vector::iterator iter, end; for (iter = primes.begin(), end = primes.end(); iter != end; ++iter){ if (addNumber(num * *iter) == BIG) break; mult (num * *iter); } } int main(int argc, char** argv){ int primesCount; while (true){ cin >> primesCount; if (primesCount == 0) break; primes.clear(); primes.resize(primesCount); for (vector::iterator iter = primes.begin(), end = primes.end(); iter != end; ++iter) cin >> *iter; cin >> low >> high; numbers.clear(); addNumber(1); mult (1); if (numbers.size() == 0) cout << "none\n"; else { set::iterator iter = numbers.end(); --iter; copy (numbers.begin(), iter, ostream_iterator(cout, ",")); cout << *iter; cout << "\n"; } } cout << flush; return 0; } * * */