首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C程序优化/提速

C程序优化/提速
EN

Stack Overflow用户
提问于 2015-10-17 05:13:42
回答 2查看 90关注 0票数 0

作为一个初学者,我编写了一个程序来查找不高于输入自然数(x)的素数(prime)的个数。程序运行得很好(我认为),但我想让它运行得更快(对于更高的数值)。这是可能的吗?如果是,是如何实现的?

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

发布于 2015-10-17 09:23:17

你的算法做了试除法,这很慢。一个更好的算法是有2000年历史的Eratosthenes筛子:

代码语言:javascript
复制
function primes(n):
    sieve := makeArray(2..n, True)
    for p from 2 to n
        if sieve[p]
            output p # prime
            for i from p*p to n step p
                sieve[i] := False

如果你想了解更多,我谦虚地推荐我博客上的散文。

票数 1
EN

Stack Overflow用户

发布于 2015-10-17 10:58:27

有一个著名的素数定理。它说明了

代码语言:javascript
复制
π(n)≈n/ln(n)

但是有一些特定的算法来计算这个函数。点击链接:PNT

Computing π(x): The Meissel, Lehmer, Lagarias, Miller, Odlyzko method

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33179638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档