#include #include #include int* erathos(long n); int main(int argc, char const *argv[]) { long area; scanf("%ld", &area); long area_sqrt = ceil(sqrt(area)) + 1; int* er = erathos(area + 1); int n; scanf("%d", &n); for (int i = 0; i < n; i++){ int prime; scanf("%d", &prime); if (area % prime == 0){ if (er[area/prime] == 0){ int prime2 = area/prime; if(prime2 > prime){ printf("%d %d", prime, prime2); } else{ printf("%d %d", prime2, prime); } return 0; } } if(er[i] == 0){ if(area % i == 0){ int prime2 = area/i; if (er[prime2] == 0){ if (prime2 > i){ printf("%d %d", i, prime2); } else { printf("%d %d", prime2, i); } return 0; } } } } for (long i = n; i < area_sqrt; i++){ if(er[i] == 0){ if(area % i == 0){ int prime2 = area/i; if (er[prime2] == 0){ if (prime2 > i){ printf("%ld %d", i, prime2); } else { printf("%d %ld", prime2, i); } return 0; } } } } //continue with era after n //for () free(er); return 0; } int* erathos(long n){ if (n > 1000000000){ n = 1000000000; } int* array = (int*)calloc(n, sizeof(int)); array[0] = 1; array[1] = 0; array[2] = 0; array[3] = 0; for (long i = 2; i < n; i++){ if (array[i] != 1){ for (long j = 2*i; j < n; j+=i){ array[j] = 1; //printf("%ld: %d |", j, array[j]); } } } // for (int i = 0; i < n; i++){ // printf("%d: %d, ", i, array[i]); // } return array; }