在线编译器 C

#include <math.h> #include <stdio.h> int main() { int n, i = 1; int m; scanf("%d", &n); m = sqrt(n); while (i <= m) { if (n % i == 0) printf("%d", i); i++; } return 0; }
这段代码试图找出整数 n 的所有因子,但只输出了小于等于 sqrt(n) 的因子,并且没有输出对应的配对因子。

- 当 n 是完全平方数时,例如 n=9,sqrt(9)=3,循环会输出 1 和 3,但缺少了因子 9 本身(因为 9/1=9 没有输出),以及因子 3 只输出了一次。实际上,对于每个 i 是因子,对应的配对因子 n/i 也应该输出,除非 i 等于 n/i(即完全平方数的情况)。
- 另外,输出格式没有加空格或换行,所有因子会连在一起,例如 n=6 会输出 "123",难以区分。建议在输出每个因子后加一个空格或换行。