用 C 语言将整数分解为质数

CBeginner
立即练习

简介

在本实验中,你将学习如何使用 C 程序将一个整数分解为其质因数。本实验涵盖以下步骤:

  1. 从用户那里读取一个整数输入。
  2. 实现一种算法,用质数除输入的数字,直到它被完全分解。
  3. 打印输入数字的质因数。

完成本实验后,你将对在 C 语言中处理整数、质数和基本编程概念有更好的理解。

读取一个整数

在这一步中,你将学习如何在一个用于质因数分解的 C 程序中从用户那里读取一个整数输入。我们将创建一个简单的程序,提示用户输入一个数字并存储它以供进一步处理。

首先,让我们在 ~/project 目录中创建一个新的 C 文件:

cd ~/project
nano prime_factorization.c

现在,添加以下代码来读取一个整数:

#include <stdio.h>

int main() {
    int number;

    printf("Enter a positive integer to factorize: ");
    scanf("%d", &number);

    printf("You entered: %d\n", number);

    return 0;
}

让我们来分析一下这段代码:

  • #include <stdio.h> 包含标准输入/输出库
  • int main() 是程序执行开始的主函数
  • printf() 用于向用户显示一个提示
  • scanf() 从用户读取整数输入
  • %d 是整数的格式说明符
  • &number 传递 number 变量的内存地址

编译并运行该程序:

gcc prime_factorization.c -o prime_factorization
./prime_factorization

示例输出:

Enter a positive integer to factorize: 24
You entered: 24

用质数相除直到完全分解

在这一步中,你将修改之前的程序以实现质因数分解算法。我们将更新 prime_factorization.c 文件,用质数除输入的数字,直到它被完全分解。

打开现有文件:

cd ~/project
nano prime_factorization.c

用以下实现替换之前的代码:

#include <stdio.h>

void factorize(int number) {
    printf("Prime factors of %d: ", number);

    // 从最小的质数开始
    for (int divisor = 2; divisor <= number; divisor++) {
        while (number % divisor == 0) {
            printf("%d ", divisor);
            number /= divisor;
        }
    }

    printf("\n");
}

int main() {
    int number;

    printf("Enter a positive integer to factorize: ");
    scanf("%d", &number);

    // 检查输入是否有效
    if (number <= 1) {
        printf("请输入一个大于 1 的数字。\n");
        return 1;
    }

    factorize(number);

    return 0;
}

让我们来分析一下质因数分解算法:

  • factorize() 函数处理质因数分解过程
  • 我们从最小的质数(2)开始
  • 外层 for 循环尝试每个可能的除数
  • 内层 while 循环用当前除数反复除该数字
  • 找到每个质因数时我们将其打印出来
  • 在每次迭代中,数字通过整数除法进行更新

编译并运行程序:

gcc prime_factorization.c -o prime_factorization
./prime_factorization

示例输出:

Enter a positive integer to factorize: 24
Prime factors of 24: 2 2 2 3

Enter a positive integer to factorize: 100
Prime factors of 100: 2 2 5 5

打印质因数

在这一步中,你将改进质因数分解程序,以提供更详细且格式化的质因数输出。我们将修改现有的 prime_factorization.c 文件来改善结果的呈现方式。

打开文件:

cd ~/project
nano prime_factorization.c

用一个改进的分解函数更新代码:

#include <stdio.h>

void factorize(int number) {
    int original_number = number;
    int factor_count = 0;

    printf("Prime Factorization of %d:\n", original_number);
    printf("---------------------\n");

    // 从最小的质数开始
    for (int divisor = 2; divisor <= number; divisor++) {
        int current_factor_count = 0;
        while (number % divisor == 0) {
            number /= divisor;
            current_factor_count++;
            factor_count++;
        }

        // 打印带有指数的因数
        if (current_factor_count > 0) {
            printf("%d^%d ", divisor, current_factor_count);
        }
    }

    printf("\n\nTotal number of prime factors: %d\n", factor_count);
}

int main() {
    int number;

    printf("Enter a positive integer to factorize: ");
    scanf("%d", &number);

    // 检查输入是否有效
    if (number <= 1) {
        printf("请输入一个大于 1 的数字。\n");
        return 1;
    }

    factorize(number);

    return 0;
}

此版本的主要改进:

  • 添加了格式化以显示质因数
  • 显示每个质因数的指数
  • 计算质因数的总数
  • 保留原始输入数字以供显示

编译并运行程序:

gcc prime_factorization.c -o prime_factorization
./prime_factorization

示例输出:

Enter a positive integer to factorize: 24
Prime Factorization of 24:
---------------------
2^3 3^1
Total number of prime factors: 4

Enter a positive integer to factorize: 100
Prime Factorization of 100:
---------------------
2^2 5^2
Total number of prime factors: 4

总结

在本实验中,你将学习如何从用户那里读取整数输入、实现质因数分解算法以及打印给定数字的质因数。关键步骤包括读取整数、用质数除该数字直到它被完全分解,以及打印质因数。

程序首先提示用户输入一个正整数,然后将其存储在一个变量中。质因数分解算法在 factorize() 函数中实现,在该函数中,输入的数字被质数除,直到它被完全分解。然后将质因数打印到控制台。