📅  最后修改于: 2023-12-03 14:45:38.998000             🧑  作者: Mango
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
变量,并使用一个筛选函数对素数进行筛选。