Онлайн компилятор C

#include <stdio.h> void print_simple(int n) { int i; for (i = 2; i * i <= n; i++) { while (n % i == 0) { printf("%d ", i); n = n / i; } } printf("%d ", i); } int main() { print_simple(5); return 0; }
这段代码试图实现一个函数,打印整数 n 的所有质因数。它从 i=2 开始循环,当 i 的平方小于等于 n 时,不断检查 n 是否能被 i 整除,如果能就打印 i 并除以 i。循环结束后,又打印了一次 i。

代码的主要问题是循环结束后打印的 i 可能不是正确的质因数。例如输入 5,循环条件 i*i <= n 在 i=2 时成立(4<=5),但 5%2!=0,循环结束后 i 变成了 3,然后打印了 3,而实际质因数是 5。

- 循环结束后,如果 n 大于 1,说明 n 本身是一个大于当前 i 的质因数,应该打印这个 n,而不是打印循环变量 i。
- 注意循环变量 i 在循环结束后会自增到下一个值,这个值不一定与剩余的 n 有关。