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

#include<stdio.h> int main() { int N; int arr[10]={0}; scanf("%d",&N); int i,num; for(num=2;num<=N;num++) { for(i=2;i<10;i++) { int digit=i; if(num%digit==0) { arr[i]++; } } } for(i=2;i<10;i++) { if(i>2) { printf(" "); } printf("%d",arr[i]); } return 0; }
这段代码试图统计从2到N之间每个数字能被2到9中哪些数字整除的次数,但逻辑上存在一些问题。

- 代码中内层循环遍历的是数字2到9,但每次判断的是num是否能被i整除,而arr[i]记录的是每个除数i出现的次数,这实际上统计的是每个除数在2到N范围内作为因子的总次数,而不是题目可能期望的每个数字的质因数分解结果。
- 变量digit被赋值为i,但从未使用,这是一个冗余的赋值。
- 数组arr的大小是10,但只使用了索引2到9,索引0和1未被使用,这虽然不会出错,但不够高效。

你的代码可能想要实现的是统计每个数字的质因数个数,或者统计每个数字能被哪些数字整除。请仔细思考题目要求的具体统计目标,并检查内层循环的逻辑是否与目标一致。