Online Compiler 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; } }if(n>1) printf("%d ", i); } int main() { print_simple(5); return 0; }
这段代码试图实现将一个整数分解为质因数并打印的功能。它从2开始检查,如果当前数能整除n,就反复打印并除以该数,最后如果n大于1则打印剩余的n。

代码中存在一个逻辑错误:在循环结束后,打印剩余n时使用了变量i,但此时i的值已经超出循环范围,不是正确的剩余质因数。

- 循环结束后,如果n大于1,应该打印n本身,而不是变量i。因为i在循环结束时可能不等于n。
- 注意循环条件 `i * i <= n` 在n变化后可能不再满足,但循环内的除法会改变n,这可能导致某些质因数被遗漏。思考一下当n本身是一个大于循环上限的质数时,循环结束后应该如何处理。