|
@@ -0,0 +1,90 @@
|
|
|
+#include <stdio.h>
|
|
|
+#include <stdlib.h>
|
|
|
+#include <stdbool.h>
|
|
|
+
|
|
|
+#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;
|
|
|
+}
|
|
|
+
|