在线编译器 C

#include <stdio.h> void print_simple(int n) { for (int i = 2; i <= n; i++) { while (n % i == 0) { printf("%d ", i); n = n / i; } } }
这段代码定义了一个函数 `print_simple`,用于打印整数 `n` 的所有质因数。它从最小的质数2开始,不断检查当前数 `i` 是否能整除 `n`,如果能就打印 `i` 并除以 `i`,然后继续检查同一个 `i`,直到不能整除为止,再递增 `i` 继续循环。

- 你的循环条件是 `i <= n`,但每次找到质因数后 `n` 会变小,这没问题。不过当 `n` 变成1时,循环还会继续检查更大的 `i`,虽然不会进入 `while` 循环,但会浪费一些时间。考虑一下循环何时可以提前结束。
- 注意,如果 `n` 本身是一个大质数,循环会一直检查到 `n` 本身,效率较低。可以思考如何利用质数的性质来优化循环的上限。