目录
题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
- 如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可。
- 但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n.重复执行第二步。
- 如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
C 语言实现
#include <stdio.h>
int main() {
int n, i;
// 提示用户输入一个整数
printf("请输入整数:");
scanf("%d", &n);
// 打印输入的整数
printf("%d = ", n);
// 从2开始检查每个数是否是n的因数
for (i = 2; i <= n; i++) {
// 当i是n的因数时,进行循环
while (n % i == 0) {
printf("%d", i); // 打印因数
n /= i; // 将n除以因数i
if (n != 1) {
printf(" * "); // 如果n不等于1,打印乘号
}
}
}
printf("\n"); // 换行
return 0; // 返回0表示程序正常结束
}
- 头文件:包含标准输入输出库
#include <stdio.h>
。 - 主函数:
int main()
是程序的入口点。 - 输入:使用
scanf
获取用户输入的整数n
。 - 输出格式:打印输入的整数,格式为
n =
。 - 质因数分解:
- 使用
for (i = 2; i <= n; i++)
遍历从 2 到n
的每个整数。 - 使用
while (n % i == 0)
检查i
是否是n
的因数。如果是,则打印i
,并将n
除以i
。 - 如果
n
仍然不等于 1,则打印乘号*
。
- 使用
- 换行:在输出结束后打印换行符。
- 返回值:
return 0;
表示程序正常结束。
这种实现方式清晰易懂,能够正确地对输入的整数进行质因数分解并输出结果。
Python 实现
# 提示用户输入一个整数
n = int(input("请输入整数:"))
print(f"{n} = ", end='')
# 从2开始检查每个数是否是n的因数
first_factor = True # 用于控制乘号的输出
for i in range(2, n + 1):
# 当i是n的因数时,进行循环
while n % i == 0:
if first_factor:
first_factor = False # 第一个因数前不加乘号
else:
print(" * ", end='') # 其他因数前加乘号
print(i, end='') # 打印因数
n //= i # 将n除以因数i
print() # 换行
代码说明:
- 输入:使用
input()
函数获取用户输入的整数,并将其转换为整数类型。 - 输出格式:使用
print(f"{n} = ", end='')
打印输入的整数,格式为n =
,并保持在同一行。 - 质因数分解:
- 使用
for i in range(2, n + 1)
遍历从 2 到n
的每个整数。 - 使用
while n % i == 0
检查i
是否是n
的因数。如果是,则打印i
,并将n
除以i
。 - 使用
first_factor
变量来控制乘号的输出,确保第一个因数前不加乘号,后续因数前加乘号。
- 使用
- 换行:在输出结束后打印换行符。
这种实现方式简洁明了,充分利用了 Python 的语法特性。
Java 实现
import java.util.Scanner;
public class PrimeFactorization {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 提示用户输入一个整数
System.out.print("请输入整数:");
int n = scanner.nextInt();
// 打印输入的整数
System.out.print(n + " = ");
// 从2开始检查每个数是否是n的因数
boolean firstFactor = true; // 用于控制乘号的输出
for (int i = 2; i <= n; i++) {
// 当i是n的因数时,进行循环
while (n % i == 0) {
if (firstFactor) {
firstFactor = false; // 第一个因数前不加乘号
} else {
System.out.print(" * "); // 其他因数前加乘号
}
System.out.print(i); // 打印因数
n /= i; // 将n除以因数i
}
}
System.out.println(); // 换行
scanner.close(); // 关闭扫描器
}
}
- 导入 Scanner 类:
import java.util.Scanner;
用于获取用户输入。 - 主类:定义一个名为
PrimeFactorization
的公共类。 - 主方法:
public static void main(String[] args)
是程序的入口点。 - 输入:使用
Scanner
类获取用户输入的整数n
。 - 输出格式:打印输入的整数,格式为
n =
。 - 质因数分解:
- 使用
for (int i = 2; i <= n; i++)
遍历从 2 到n
的每个整数。 - 使用
while (n % i == 0)
检查i
是否是n
的因数。如果是,则打印i
,并将n
除以i
。 - 使用
firstFactor
变量来控制乘号的输出,确保第一个因数前不加乘号,后续因数前加乘号。
- 使用
- 换行:在输出结束后打印换行符。
- 关闭扫描器:使用
scanner.close();
关闭扫描器以释放资源。
Js 实现
// 提示用户输入一个整数
const n = parseInt(prompt("请输入整数:"), 10);
let originalNumber = n; // 保存原始数字以便输出
let result = `${originalNumber} = `; // 初始化结果字符串
// 从2开始检查每个数是否是n的因数
let firstFactor = true; // 用于控制乘号的输出
for (let i = 2; i <= n; i++) {
// 当i是n的因数时,进行循环
while (n % i === 0) {
if (firstFactor) {
firstFactor = false; // 第一个因数前不加乘号
} else {
result += " * "; // 其他因数前加乘号
}
result += i; // 添加因数到结果字符串
n /= i; // 将n除以因数i
}
}
// 输出结果
console.log(result);
- 输入:使用
prompt()
函数获取用户输入的整数,并使用parseInt()
将其转换为整数。 - 保存原始数字:将输入的数字保存到
originalNumber
变量中,以便在输出时使用。 - 初始化结果字符串:创建一个字符串
result
,用于存储质因数分解的结果,格式为n =
。 - 质因数分解:
- 使用
for (let i = 2; i <= n; i++)
遍历从 2 到n
的每个整数。 - 使用
while (n % i === 0)
检查i
是否是n
的因数。如果是,则将因数添加到结果字符串中,并将n
除以i
。 - 使用
firstFactor
变量来控制乘号的输出,确保第一个因数前不加乘号,后续因数前加乘号。
- 使用
- 输出结果:使用
console.log(result);
输出最终的质因数分解结果。
这种实现方式简洁明了,充分利用了 JavaScript 的语法特性。请注意,prompt()
函数通常在浏览器环境中使用。
以上实例输出结果为:
请输入整数:90
90=2*3*3*5