#include <cstdio> #include <vector> typedef long long int num_t; num_t calc_diff(std::vector<num_t> &primes, num_t n, num_t mul, int size) { if (n < 1) { return -1; } if (n == 1) { return n * mul; } num_t best = -1; for(int i = 0; i < size; ++i) { num_t p = primes[i]; num_t new_n = n / p; num_t new_m = p * mul; best = std::max(best, calc_diff(primes, new_n, new_m, i + 1)); } return best; } int main() { std::vector<num_t> primes; num_t n; int k; num_t p; scanf("%d", &k); scanf("%lld", &n); primes.resize(k); for (int i = 0; i < k; ++i) { scanf("%lld", &p); primes[i] = p; } num_t v = calc_diff(primes, n, 1, primes.size()); printf("%lld", v); }
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 | #include <cstdio> #include <vector> typedef long long int num_t; num_t calc_diff(std::vector<num_t> &primes, num_t n, num_t mul, int size) { if (n < 1) { return -1; } if (n == 1) { return n * mul; } num_t best = -1; for(int i = 0; i < size; ++i) { num_t p = primes[i]; num_t new_n = n / p; num_t new_m = p * mul; best = std::max(best, calc_diff(primes, new_n, new_m, i + 1)); } return best; } int main() { std::vector<num_t> primes; num_t n; int k; num_t p; scanf("%d", &k); scanf("%lld", &n); primes.resize(k); for (int i = 0; i < k; ++i) { scanf("%lld", &p); primes[i] = p; } num_t v = calc_diff(primes, n, 1, primes.size()); printf("%lld", v); } |