合数分解1.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include <stdio.h>
  2. #include <math.h>
  3. // 函数:判断一个数是否为素数
  4. int is_prime(int num) {
  5. if (num <= 1) return 0; // 0和1不是素数
  6. if (num == 2) return 1; // 2是素数
  7. if (num % 2 == 0) return 0; // 偶数不是素数
  8. // 试除法判断是否为素数
  9. int i;
  10. for (i = 3; i <= sqrt(num); i += 2) {
  11. if (num % i == 0) {
  12. return 0; // 能整除则不是素数
  13. }
  14. }
  15. return 1; // 不能整除则是素数
  16. }
  17. // 函数:分解合数,找出只出现一次的素数因子
  18. void decompose(int num) {
  19. if (num <= 1) return; // 小于等于1的数没有素数因子
  20. int i;
  21. // 试除法分解合数
  22. for (i = 2; i <= num; i++) {
  23. if (num % i == 0 && is_prime(i)) {
  24. int count = 0;
  25. while (num % i == 0) {
  26. num /= i;
  27. count++;
  28. }
  29. if (count == 1) {
  30. printf("%d ", i); // 输出只出现一次的素数因子
  31. }
  32. }
  33. }
  34. printf("\n");
  35. }
  36. int main() {
  37. int num;
  38. scanf("%d", &num);
  39. // 分解合数并输出只出现一次的素数因子
  40. decompose(num);
  41. return 0;
  42. }