Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何减少产生素数的空间,使之达到10^16,用于埃拉托斯烯的筛分? 我在C++中实现了埃拉托色尼筛选器,但是代码崩溃大于10 ^ ^编译器显示信号11SIGEV。这是因为全局数组BoOL A(5000000000000000);为了检查最大为10^16的奇数,我将数组大小设置为10^16/2=5*10^15。如何减少空间? 这个问题有一个答案,我试过了,但我的程序崩溃了。有人能提供实现细节来修复它吗 #include <bits/stdc++.h> using namespace std; long long unsigned n,sqN; bool a[5000000000000000]; long long int sieve_of_Eratosthenes(); int main() { cout<<"Enter upper bound to generate prime upto:"<<endl; cin>>n; long long int count = sieve_of_Eratosthenes(); cout<<"Total = "<<count<<endl; return 0; } long long int sieve_of_Eratosthenes() { long long unsigned i,j,count = 0; sqN = (long long unsigned) sqrt(n); for(i=3; i<=sqN; i+=2) { if(a[i/2]==true) { continue; } for(j = i*i; j<=n; j+=(2*i)) { a[j/2] = true; } } if(n>=2) { count++; cout<<2<<endl; } for(i=3; i<=n; i+=2) { if(a[i/2]==false) { cout<<i<<endl; count++; } } return count; }_C++_Sieve Of Eratosthenes - Fatal编程技术网

如何减少产生素数的空间,使之达到10^16,用于埃拉托斯烯的筛分? 我在C++中实现了埃拉托色尼筛选器,但是代码崩溃大于10 ^ ^编译器显示信号11SIGEV。这是因为全局数组BoOL A(5000000000000000);为了检查最大为10^16的奇数,我将数组大小设置为10^16/2=5*10^15。如何减少空间? 这个问题有一个答案,我试过了,但我的程序崩溃了。有人能提供实现细节来修复它吗 #include <bits/stdc++.h> using namespace std; long long unsigned n,sqN; bool a[5000000000000000]; long long int sieve_of_Eratosthenes(); int main() { cout<<"Enter upper bound to generate prime upto:"<<endl; cin>>n; long long int count = sieve_of_Eratosthenes(); cout<<"Total = "<<count<<endl; return 0; } long long int sieve_of_Eratosthenes() { long long unsigned i,j,count = 0; sqN = (long long unsigned) sqrt(n); for(i=3; i<=sqN; i+=2) { if(a[i/2]==true) { continue; } for(j = i*i; j<=n; j+=(2*i)) { a[j/2] = true; } } if(n>=2) { count++; cout<<2<<endl; } for(i=3; i<=n; i+=2) { if(a[i/2]==false) { cout<<i<<endl; count++; } } return count; }

如何减少产生素数的空间,使之达到10^16,用于埃拉托斯烯的筛分? 我在C++中实现了埃拉托色尼筛选器,但是代码崩溃大于10 ^ ^编译器显示信号11SIGEV。这是因为全局数组BoOL A(5000000000000000);为了检查最大为10^16的奇数,我将数组大小设置为10^16/2=5*10^15。如何减少空间? 这个问题有一个答案,我试过了,但我的程序崩溃了。有人能提供实现细节来修复它吗 #include <bits/stdc++.h> using namespace std; long long unsigned n,sqN; bool a[5000000000000000]; long long int sieve_of_Eratosthenes(); int main() { cout<<"Enter upper bound to generate prime upto:"<<endl; cin>>n; long long int count = sieve_of_Eratosthenes(); cout<<"Total = "<<count<<endl; return 0; } long long int sieve_of_Eratosthenes() { long long unsigned i,j,count = 0; sqN = (long long unsigned) sqrt(n); for(i=3; i<=sqN; i+=2) { if(a[i/2]==true) { continue; } for(j = i*i; j<=n; j+=(2*i)) { a[j/2] = true; } } if(n>=2) { count++; cout<<2<<endl; } for(i=3; i<=n; i+=2) { if(a[i/2]==false) { cout<<i<<endl; count++; } } return count; },c++,sieve-of-eratosthenes,C++,Sieve Of Eratosthenes,即使使用每奇数一位,也需要6.25e14=625TB来存储它。你可以把一些大的磁盘阵列映射到内存,或者使用超级计算机的RAM。。。但是,除非你有这样的硬件,否则我认为你不能用常规的Eratosthenes筛来存储这么大的数字。即使你用每奇数一位,你也需要6.25e14=625TB来存储它。你可以把一些大的磁盘阵列映射到内存,或者使用超级计算机的RAM。。。但是,除非你有这样的硬件,否则我认为你不能用常规的埃拉托什筛来筛出这么大的数字。你不能在任何不是超级计算机的计算机上分配这么多的内存空间。如果

即使使用每奇数一位,也需要6.25e14=625TB来存储它。你可以把一些大的磁盘阵列映射到内存,或者使用超级计算机的RAM。。。但是,除非你有这样的硬件,否则我认为你不能用常规的Eratosthenes筛来存储这么大的数字。

即使你用每奇数一位,你也需要6.25e14=625TB来存储它。你可以把一些大的磁盘阵列映射到内存,或者使用超级计算机的RAM。。。但是,除非你有这样的硬件,否则我认为你不能用常规的埃拉托什筛来筛出这么大的数字。

你不能在任何不是超级计算机的计算机上分配这么多的内存空间。如果你只想生成给定范围内的素数{比如,a,b,其中a,你不能在任何不是超级计算机的计算机上分配这么多内存空间。如果你只想生成给定范围内的素数{比如说,a,b,向量的实现方式可以让你获得难以置信的大小,但要以性能为代价打包和解包位。配置文件,看看它是否是适合你的解决方案。我想看看能在堆栈或任何地方分配这么多内存的计算机。伙计们,他是全局的,所以除非你处理这个问题一个真正奇怪的实现,它永远不会在栈上。我有一个想法,使用C++中的STD:BITSET。它肯定会减少空间。如何尝试它?谷歌告诉我,将花费5字节来存储Boo.HM数组。更好地减少问题大小。向量可以以这样的方式实现,你可以得到难以置信的大小,但在一个性能成本包装和解包位。配置文件看看它是对你的正确解决方案。我想看看能在堆栈或任何地方分配内存量的计算机。伙计,他是一个全球性的,所以除非你处理一个真正奇怪的实现,它永远不会在栈上。我有一个想法,使用STD:BITSET在C++中。它肯定会减少空间。试一试怎么样?谷歌告诉我,存储布尔数组需要5 PB。嗯。最好减少问题的大小。即使在一台超级计算机上,你也可能无法分配那么多内存。现在大多数超级计算机都是集群,每个节点都有自己的内存。创建一个区块可能是可能的虚拟内存有那么大,但据我所知,这并不常见。即使在一台超级计算机上,你也可能无法分配那么多内存。现在大多数超级计算机都是集群,每个节点都有自己的内存。可能会创建这么大的虚拟内存块,但据我所知,这并不常见。