【发布时间】:2015-03-28 18:10:38
【问题描述】:
所以我的代码需要帮助。出于某种原因,当我输入超过 500,000 的数字时,它一直在崩溃。这是确切的任务。
实施埃拉托色尼筛法并用它找出所有素数 小于或等于一百万的数字。使用结果 证明哥德巴赫猜想对四到四之间的所有偶数 一百万,包括在内。
使用以下声明实现一个函数:
void sieve(int array[], int num);这个函数接受一个整数数组作为它的参数。数组 应初始化为值 1 到 1000000。 函数修改数组,以便只保留素数; 所有其他值都归零。
必须编写此函数以接受任何整数数组 尺寸。您必须输出 1 到 1000000,但是当我测试你的函数时,它可能在一个数组上 大小不同。
使用以下声明实现一个函数:
void goldbach(int array[], int num);此函数与前一个函数采用相同的参数 并显示 4 到 1000000 之间的每个偶数,其中两个 添加到它的素数。
这里的目标是提供一个有效的实现。这 表示确定是否没有乘法、除法或模数 一个数是素数。这也意味着第二个函数必须找到 两个素数有效。
程序的输出:
1 到 1000000 之间的所有素数 以及 4 到 1000000 之间的所有偶数以及两个素数 总结起来的数字。
不要为此项目提供输出或会话记录!
这就是我目前所拥有的。如果有人可以帮助我,那就太好了。
#include <iostream>
using namespace std;
void sieve (int array[], int num);
int main()
{
int num;
cout << "Enter a number to calculate up to." << endl;
cin>> num;
if ( num < 2 )
return 0;
int array[num];
array[0]= array[1]= 0;
for ( int i= 2; i < num; ++i )
array[i]= i;
sieve(array,num);
for (int i=0; i<num; i++)
if (array[i] > 0)
cout << array[i] <<" "<<endl;
cout<<endl;
return 0;
}
void sieve( int array[], int num )
{
for ( int i= 0; i < num; ++i )
{
if ( array[i] != 0 )
{
for ( int j= i+i; j < num; j += i )
{
array[j]= 0;
}
}
}
}
【问题讨论】:
-
int array[num];请改用std::vector<int> array(num);。您的堆栈大小可能太小而无法分配这么大的数组。 -
我还没有学会如何使用向量。不过谢谢你的回复!
-
您也可以使用
int* array = new int[n];自己管理分配的堆内存。但要小心。