我无法理解这段代码。抱歉这个愚蠢的问题[已关闭]

问题描述 投票:0回答:1
void func(int N)
{
    int i, j, arr[246913] = { 0,1 };
    for (j = 2; j < 246913 / j; j++)
    {
        if (arr[j] == 1)
            continue;
        for (i = j * j; i < 246913; i += j)
            if (i % j == 0)
                arr[i] = 1;
    }

    int cnt = 0;
    for (i = N + 1; i <= N * 2; i++)
        if (arr[i] == 0)
            cnt++;
    printf("%d", cnt);
}

int main()
{
    func(7);
    func(0);
    func(4);
    func(9);
}

我试图通过编写这段代码的过程来理解代码。 但我想我必须理解这段代码的真正含义才能了解更多。

我希望有人可以帮助我正确理解这段代码。 我还想知道,如何只看代码就能理解这类算法代码问题。 希望能给像我这样的初学者一些建议。 谢谢您的帮助:)

arrays c func
1个回答
0
投票

func
打印
N+1
2*N
之间(含)之间的素数个数。它首先使用筛子创建一个数组,其中 0 表示素数,1 表示合数(0 的条目未使用)。然后它从
N+1
2*N
进行迭代,计算 0 个条目。最后它打印找到的 0 条目的数量,即范围内的素数数量。

它使用了一些简单的优化,但它们都依赖于相当基本的数学,所以应该不会太难理解。

© www.soinside.com 2019 - 2024. All rights reserved.