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);
}
我试图通过编写这段代码的过程来理解代码。 但我想我必须理解这段代码的真正含义才能了解更多。
我希望有人可以帮助我正确理解这段代码。 我还想知道,如何只看代码就能理解这类算法代码问题。 希望能给像我这样的初学者一些建议。 谢谢您的帮助:)
func
打印 N+1
和 2*N
之间(含)之间的素数个数。它首先使用筛子创建一个数组,其中 0 表示素数,1 表示合数(0 的条目未使用)。然后它从 N+1
到 2*N
进行迭代,计算 0 个条目。最后它打印找到的 0 条目的数量,即范围内的素数数量。
它使用了一些简单的优化,但它们都依赖于相当基本的数学,所以应该不会太难理解。