Online Compiler C

#include <stdio.h> void print_simple(int n) { while (n != 1) { for (int i = 2; i<= n; i++) { int how_many = 0; for(int j = 1; j <= i; j++) { if(i % j == 0) { how_many++; } } if (how_many == 2){ while(n % i != 0){ if(n % i == 0){ printf("%d ", i); } n = n/i; } } } } return; } int main() { int a; scanf("%d", &a); print_simple(a); }
这段代码的目的是将一个整数分解为质因数并打印出来。但代码中存在逻辑错误,导致无法正确输出结果。

主要问题在于内层循环中判断质数的部分和分解因数的逻辑混在一起,导致循环结构混乱。具体来说:

- 在 `while(n % i != 0)` 这个循环里,条件判断和内部 `if` 语句是矛盾的。当 `n % i != 0` 时,循环体不会执行,所以内部的 `if` 永远不会为真,也就无法打印任何因数。
- 另外,每次外层 `for` 循环都会重新计算 `i` 是否为质数,但 `n` 的值在分解过程中会变化,这可能导致重复检查或遗漏因数。

- 提示1:思考如何将“判断一个数是否为质数”和“用这个质数去分解n”这两个步骤分开。可以先写一个单独的函数来判断质数,或者先找到质数再尝试分解。
- 提示2:注意 `while` 循环的条件。当 `n` 能被 `i` 整除时,应该反复用 `i` 去除 `n` 并打印 `i`,直到 `n` 不能被 `i` 整除为止。当前代码中的 `while(n % i != 0)` 条件写反了。