【发布时间】:2019-02-23 10:10:34
【问题描述】:
写这个是为了找到2到1000之间的质数。但是在显示2 和3 是素数后它就停止了。我知道我可以在互联网上找到如何编写代码来查找素数。但我真的需要知道这里出了什么问题。
#include <stdio.h>
main() {
int i, j;
int ifPrime = 1;
for (i = 2; i < 1000; i++) {
for (j = 2; j < i; j++) {
if (i % j == 0) {
ifPrime = 0;
break;
}
}
if (ifPrime == 1) {
printf("%d is prime\n", i);
}
}
}
【问题讨论】:
-
你在错误的地方初始化 ifPrime。
-
阅读How to Debug Small Programs。调试技能就是编程技能
-
请注意,您可以通过测试
j * j <= i显着加快内部循环,当i接近 1000 时,每个值可以节省超过 960 次迭代。即使检查也没有多大意义大于 2 的数字;他们不是素数。 -
@JonathanLeffler
j <= i/j在更通用的代码中优于j * j <= i。它不会溢出。j * j <= i当i == INT_MAX是一个无限循环时。
标签: c