#include <iostream>
#include <list>
#include <cmath>
typedef std::list<long long> list;
int main(int argc, char** argv) {
long long k;
long long N;
long long max_primes = 10000000;
long long max_N;
long long value;
list p;
list primes;
std::cin >> k;
std::cin >> N;
primes.push_back(2);
for (long long i = 3; i < sqrt(N) + 1 && i < max_primes; i += 2) {
int is_prime = 1;
list::iterator it = primes.begin();
while (*it < sqrt(i) + 1) {
if (! (i % *it)) {
is_prime = 0;
break;
}
it++;
}
if (is_prime) {
primes.push_back(i);
}
}
for (long long i = 0; i < k; i++) {
std::cin >> value;
if (value < N) {
p.push_back(value);
list::iterator it = primes.begin();
while (*it != value && it != primes.end()) it++;
if (it != primes.end()) {
primes.erase(it);
}
} else if (value == N) {
std::cout << N << std::endl;
return 0;
}
}
if (p.begin() != p.end()) {
p.sort();
max_N = N;
while (max_N > 1) {
N = max_N;
//std::cout << max_N << std::endl;
list::iterator it = primes.begin();
while (it != primes.end() && (max_N % *it)) {
it++;
}
if (it == primes.end()) {
//std::cout << max_N << std::endl;
list::iterator it2 = p.begin();
while (N > 1 && it2 != p.end()) {
while (!(N % *it2)) {
N /= *it2;
}
it2++;
}
if (N == 1) {
std::cout << max_N << std::endl;
return 0;
}
}
max_N--;
}
}
std::cout << max_N << std::endl;
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 77 78 79 80 81 82 | #include <iostream> #include <list> #include <cmath> typedef std::list<long long> list; int main(int argc, char** argv) { long long k; long long N; long long max_primes = 10000000; long long max_N; long long value; list p; list primes; std::cin >> k; std::cin >> N; primes.push_back(2); for (long long i = 3; i < sqrt(N) + 1 && i < max_primes; i += 2) { int is_prime = 1; list::iterator it = primes.begin(); while (*it < sqrt(i) + 1) { if (! (i % *it)) { is_prime = 0; break; } it++; } if (is_prime) { primes.push_back(i); } } for (long long i = 0; i < k; i++) { std::cin >> value; if (value < N) { p.push_back(value); list::iterator it = primes.begin(); while (*it != value && it != primes.end()) it++; if (it != primes.end()) { primes.erase(it); } } else if (value == N) { std::cout << N << std::endl; return 0; } } if (p.begin() != p.end()) { p.sort(); max_N = N; while (max_N > 1) { N = max_N; //std::cout << max_N << std::endl; list::iterator it = primes.begin(); while (it != primes.end() && (max_N % *it)) { it++; } if (it == primes.end()) { //std::cout << max_N << std::endl; list::iterator it2 = p.begin(); while (N > 1 && it2 != p.end()) { while (!(N % *it2)) { N /= *it2; } it2++; } if (N == 1) { std::cout << max_N << std::endl; return 0; } } max_N--; } } std::cout << max_N << std::endl; return 0; } |
English