【发布时间】:2015-10-16 21:13:41
【问题描述】:
作为一个初学者,我编写了一个程序来查找不大于输入自然数 (x) 的素数 (prime) 的数量。该程序运行良好(我认为),但我想让它运行得更快(对于更高的数字)。有没有可能,如果有,怎么做?
#include <stdio.h>
int main() {
int x, i, j, flag = 1, prime = 0 ;
scanf("%d", &x);
for (i = 2; i <= x; i++) {
j = 2;
while (flag == 1 && j < i/2 + 1 ) {
if (i % j == 0) {
flag = 0;
}
j++;
}
if (flag == 1) {
prime++;
}
flag = 1;
}
printf("%d\n", prime);
return 0;
}
【问题讨论】:
-
1:找到更好的算法。 2. 对于您当前的算法,请注意只有一个偶素数。 3.对于你当前的算法,注意如果你没有在第一个
sqrt(n)数字中找到除数,n是素数。 -
为目前找到的每个素数创建一个列表或数组。仅将它们作为除数进行测试。如果
2和3已经成为除数,那么测试6是否是除数是没有意义的。 -
查看埃拉托色尼筛。您可以在此基础上构建更高效的算法。
-
@WeatherVane 很好。我会尝试实现这个
-
不确定这是否足以提高速度,但您可以将
if (flag==1){prime++;}替换为prime+=flag;并且您可以在flag=0;之后添加break;
标签: c performance primes