Когда я редактировал ваш код, чтобы показать значение k для каждого i, я получил 2 для i = 4, что означает один раз для 2 и второй раз для 4. Таким образом, это означает 4% 4 == 0 и 4% 2 == 0 оценивается как истинное.
#include <stdio.h>
int main()
{
int i,j,k = 1;
for(i=2;i<=100;i++)
{
k=0;
for(j=2;j<=i;j++)
{
if(i%j==0)
k++;
}
printf("%d -- %d\n",i,k);
}
return 0;
}
Вывод, показывающий значение k для каждого i ::
![enter image description here](https://i.stack.imgur.com/wlTGH.png)