C++ 如何增加数组的大小,以从1(101201301..等等)开始,以100的增量适应所有素数?

C++ 如何增加数组的大小,以从1(101201301..等等)开始,以100的增量适应所有素数?,c++,arrays,primes,sieve,C++,Arrays,Primes,Sieve,逻辑是错误的。与其使用大量布尔数组来标记该范围内的所有数字(只要尝试非常大的范围,就会耗尽内存),只需使用一个包含足够元素的整数数组,以满足预期的素数数量,并将生成的整数存储在其中 最好使用向量,例如std::vector。如果您没有使用c++11+,您可能会考虑使用malloc和realloc来获取、保留和调整结果列表的大小。您是否尝试使用std::vector来节省内存并避免使用堆栈?请注意,VLA不是标准的C++@g_bor Unsigned long long,这不会影响数组中实际值的限

逻辑是错误的。与其使用大量布尔数组来标记该范围内的所有数字(只要尝试非常大的范围,就会耗尽内存),只需使用一个包含足够元素的整数数组,以满足预期的素数数量,并将生成的整数存储在其中


最好使用向量,例如
std::vector
。如果您没有使用c++11+,您可能会考虑使用
malloc
realloc
来获取、保留和调整结果列表的大小。

您是否尝试使用
std::vector
来节省内存并避免使用堆栈?请注意,VLA不是标准的C++@g_bor Unsigned long long,这不会影响数组中实际值的限制,而不会影响数组中存储的数据量吗?请注意
memset(prime,true,sizeof(prime))不使用
true
填充数组。如果一个
bool
的大小是四(这是常见的),它将被4369填充。使用<代码> STD::填写< /Calp>。<代码>布尔Orth[n+1] < /Cord>不是C++。即使是这样,你也会把你的堆栈炸掉。这并不能解决这个问题,但是
如果(prime[p]==true)
是多余的
if(prime[p])
也这么说。
#include <bits/stdc++.h> 
    using namespace std;
  
void SieveOfEratosthenes(int n) 
{ 
 
    bool prime[n+1];
    memset(prime, true, sizeof(prime)); 
  
    for (int p=2; p*p<=n; p++) 
    { 

        if (prime[p] == true) 
        { 

            for (int i=p*p; i<=n; i += p) 
                prime[i] = false; 
        } 
    } 

    int index = 0;
    for (int p=2; p<=n; p++) 
       if (prime[p]) 
       {
        index += 1;
            if(index % 100 == 1)
            {
                cout << index << ". " << p << endl;
                
            }
            
       }
           
} 
   
int main() 
{ 
    
    SieveOfEratosthenes(1000000); //if i add another 0 on this function the code won't run
    return 0; 
} 
1. 2
101. 547
201. 1229
301. 1993
401. 2749
501. 3581
601. 4421
701. 5281
801. 6143
901. 7001
1001. 7927
1101. 8837
1201. 9739
1301. 10663
1401. 11677
//..... (and so on until,)
78301. 997219
78401. 998617 // it stops here