📜  prime[total++] = i (1)

📅  最后修改于: 2023-12-03 14:45:38.998000             🧑  作者: Mango

介绍prime[total++] = i

一、概述

prime[total++] = i 是一种常用的 C++ 代码,用于将素数 i 存储到一个数组中。素数意味着只能被1和本身整除的自然数,且大于1。通过使用 prime 数组存储素数,我们可以在程序中快速使用这些数。

二、代码示例

下面是使用 prime[total++] = i 存储素数的代码片段:

#include <iostream>

const int MAXN = 1e5+5;

int prime[MAXN],total=0;
bool is_prime[MAXN];

void sieve(int n)
{
    for (int i = 2; i <= n; ++i)
    {
        if (!is_prime[i]) prime[total++] = i;
        for (int j = 0; j < total && i * prime[j] <= n; ++j)
        {
            is_prime[i * prime[j]] = true;
            if (i % prime[j] == 0) break;
        }
    }
}

int main()
{
    sieve(100);
    for (int i = 0; i < total; ++i)
    {
        std::cout << prime[i] << " ";
    }
    std::cout << std::endl;
    return 0;
}
三、解释

在上述代码片段中,我们首先声明了一个 prime 数组和 total 变量。

int prime[MAXN],total=0;

prime 数组用于存储素数,而 total 变量用于记录素数的个数。

接下来,我们使用了一个名为 sieve 的函数,用于筛选素数。该函数的参数 n 表示筛选的上限。

sieve 函数中,我们首先使用 for 循环遍历从 2 到 n 的每个自然数 i。

for (int i = 2; i <= n; ++i)

接着,我们使用一个名为 is_prime 的 bool 数组,用于标记每个数是否为素数。

bool is_prime[MAXN];

我们将 is_prime 数组的所有元素初始化为 false。

memset(is_prime, false, sizeof(is_prime));

在第一个 for 循环中,如果当前的 i 不是素数,则将它存储到 prime 数组中,并将 total 的值递增。

if (!is_prime[i]) prime[total++] = i;

接着,我们使用第二个 for 循环遍历 prime 数组中的每个素数。

for (int j = 0; j < total && i * prime[j] <= n; ++j)

如果 i 和 prime[j] 的乘积小于等于 n,则将它们的乘积标记为非素数。

is_prime[i * prime[j]] = true;

如果 i 是 prime[j] 的倍数,则跳出循环。

if (i % prime[j] == 0) break;

最后,我们在 main 函数中调用 sieve 函数,并遍历 prime 数组输出每个素数。

sieve(100);
for (int i = 0; i < total; ++i)
{
    std::cout << prime[i] << " ";
}
四、总结

prime[total++] = i 是一种常用的数据结构和算法中的技巧,用于将素数存储到数组中以便程序中的快速使用。在使用时,我们需要声明 prime 数组和 total 变量,并使用一个筛选函数对素数进行筛选。