埃拉托色尼的筛子和哥德巴赫猜想
The Sieve of Eratosthenes and Goldbach's Conjecture
埃拉托色尼的筛子和哥德巴赫猜想
实施埃拉托色尼筛并用它来找到所有素数 小于或等于一百万的数字。使用结果来 证明哥德巴赫猜想对于 4 和 4 之间的所有偶数 一百万,含。
使用以下声明实现函数:
void sieve(int array[], int num); 此函数将整数数组作为其参数。数组 应初始化为值 1 到 1000000。这 函数修改数组,以便只保留质数; 所有其他值均归零。 必须编写此函数以接受任何 大小。您必须输出 1 到 1 之间的所有素数 1000000,但是当我测试您的函数时,它可能在 不同的尺寸。
使用以下声明实现函数:
void goldbach(int array[], int num); 此函数采用与前一个函数相同的参数 并显示 4 到 1000000 之间的每个偶数,其中两个 添加到它的质数。 这里的目标是提供有效的实现。这 表示在确定 数字是素数。这也意味着第二个函数必须找到 两个素数有效。
程序输出:1 到 1000000 之间的所有质数 以及 4 到 1000000 之间的所有偶数和两个素数 数字加起来。
请勿为此项目提供输出或会话记录!
这是我到目前为止的代码,我的问题是它将大于 1,000 的数字显示为 1s,我该怎么做,谢谢!
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
void sieve(int array[], int num);
void goldbach(int array[], int num);
const int arraySize = 1000000;
int nums[arraySize];
int main(){
for (int i = 0; i <= arraySize; ++i)
nums[i] = 1;
nums[0] = nums[1] = 0;
sieve(nums, arraySize);
for(int i = 0; i < 10000; ++i){
if (nums[i] > 0){
cout << nums[i] << " ";
}
}
goldbach(nums, arraySize);
return 0;
}
void sieve(int array[], int num) {
int squareR = (int)sqrt(num);
for(int i = 2; i <= squareR; ++i){
int k;
if(array[i]){
for(k = i*i; k <= num; k += i)
array[k] = 0;
}
if (array[i] == 1){
array[i] = i;
}
}
}
void goldbach(int array[], int num){
int i, r = 0;
for (i = 4; i <= num; i += 2){
for (int j = 2; j <= i/2; j++)
if (array[j] && array[i-j]) r ++;
}
}
我的问题是它将大于 1,000 的数字显示为 1,我该怎么做
这是因为您没有在此处更新 1000 以上的数组中的值:
for(int i = 2; i <= squareR; ++i){
...
if (array[i] == 1){
array[i] = i;
显然,squareR 上方的数组条目不会更新,而是保留在您初始化它们的值上,即1
.
但是我你根本不需要这个更新。您可以删除它并简化代码,将数组的条目保留为 1(对于素数)或 0(对于非素数)。有了这个,并像这样显示您的结果(以main
为单位):
for(int i = 0; i < arraySize; ++i){
if (nums[i] != 0){
// cout << nums[i] << " "; // <-- drop this
cout << i << " "; // <-- use this
}
}
- 内存错误低于在C++年实现埃拉托色尼筛分时的预期
- 列出埃拉托色尼的筛子
- 埃拉托色尼的筛子在一段上
- 筛子的埃拉托色尼错误实现
- 为什么我的埃拉托色尼代码筛子无限循环.我已经用几个数字进行了测试
- 埃拉托色尼筛子算法的效率
- 埃拉托色尼的筛子和哥德巴赫猜想
- 如何使用埃拉托斯特内斯筛算法改进素数程序
- 优化埃拉托色尼筛
- 使用地图的埃拉托色尼筛子进行记忆和素数生成
- 需要帮助在 c++ 中优化埃拉托色尼筛
- 埃拉托色尼筛,用于大数 c++
- 埃拉托色尼筛C++
- 使用二维阵列用C++求解埃拉托色尼筛
- 埃拉托申斯孢子虫Prime1 C++的分段筛
- 埃拉托斯梯尼的筛子,数组太大,以至于内存越界
- 分割如何提高埃拉托斯尼筛的运行时间
- 并行化埃拉托色尼筛 用于查找素数的算法
- 埃拉托色尼筛子不总是工作
- 运行时错误 (SIGSEGV) SPOJ 筛子的埃拉托色尼