#include #include #include #define MAX_N 20 // 函数:检查一个数是否是素数 bool is_prime(int n) { if (n <= 1) return false; if (n == 2) return true; if (n % 2 == 0) return false; int i; for (i = 3; i * i <= n; i += 2) { if (n % i == 0) return false; } return true; } // 函数:对一个数进行质因数分解,并将结果存入集合 void factorize(int n, int* primes, int* prime_count) { int i; for (i = 2; i * i <= n; i++) { if (n % i == 0) { while (n % i == 0) { n /= i; } primes[(*prime_count)++] = i; } } if (n > 1) { primes[(*prime_count)++] = n; } } // 函数:对集合中的质因数进行去重 void remove_duplicates(int* primes, int* prime_count) { bool unique[MAX_N * 20] = {0}; int temp[MAX_N * 20]; int temp_count = 0; int i; for (i = 0; i < *prime_count; i++) { if (!unique[primes[i]]) { unique[primes[i]] = true; temp[temp_count++] = primes[i]; } } for (i = 0; i < temp_count; i++) { primes[i] = temp[i]; } *prime_count = temp_count; } // 函数:比较两个整数的比较器,用于qsort函数 int compare(const void* a, const void* b) { return (*(int*)a - *(int*)b); } int main() { int n; scanf("%d", &n); int i; int numbers[MAX_N]; for (i = 0; i < n; i++) { scanf("%d", &numbers[i]); } int primes[MAX_N * 20]; int prime_count = 0; for (i = 0; i < n; i++) { factorize(numbers[i], primes, &prime_count); } remove_duplicates(primes, &prime_count); qsort(primes, prime_count, sizeof(int), compare); for (i = 0; i < prime_count; i++) { printf("%d ", primes[i]); } printf("\n"); return 0; }