我对 C 中的 for 循环有疑问。该程序的目的是找到已知数量 k 的素数。这是我的程序:
unsigned int i, k, j;
unsigned long int prime;
int _tmain(int argc, _TCHAR* argv[]) {
printf("How many prime numbers do you want to print out in order? "); scanf_s("%u", &k);
printf("%u fist prime numbers are: ", k);
i = 1;
prime = 2;
while (i <= k)
{
for (j = 2; j <= prime; j++)
{
if (prime % j == 0)
{
if (j == prime && prime != 2)
{
printf("%lu, ", prime);
i++;
}
prime++;
j = 2;
}
}
}
_getch();
return 0;
}
当我运行程序时,它会返回无限的数字序列。但如果我添加“else j++;” 像这样:
for (j = 2; j <= prime; j++)
{
if (prime % j == 0)
{
if (j == prime && prime != 2)
{
printf("%lu, ", prime);
i++;
}
prime++;
j = 2;
}
else j++;
}
然后程序将正常运行。我觉得这有点奇怪,无法解释为什么?
在此先感谢(并为我的英语不好感到抱歉)。