javascript - 同一个JS程序在C++中的不同实现

标签 javascript c++

我最近提出了一个关于在 SO 上用 Javascript 实现埃拉托色尼筛法的问题,这是我得到的有效答案:

function sieve(low, high) {
var primeArray = [], ll = Math.sqrt(high), output = [];

for (var i = 2; i <= high; i++) {
    primeArray[i] = true;
}

for (var i = 2; i <= ll; i++) {
    if (primeArray[i]) {
        for (var j = i * i; j <= high; j += i) {
            primeArray[j] = false;
        }
    }
}

for (var i = 2; i <= ll; i++) {
    if(primeArray[i]) {
        var segmentStart = Math.ceil(low/i) * i;
        // need this test to ensure we are not deleting primes
        if (primeArray[segmentStart]) segmentStart += i; 

        for(var j = segmentStart; j <= high; j+=i) {
            primeArray[j] = false;
        }
    }
}

for(var i = low; i <= high; i++) {
    if(primeArray[i]) {
        output.push(i);
    }
}
return output;
}

console.log(sieve(1, 20));

我尝试在 C++ 中实现相同的功能 然而最终的结果却截然不同。 我的 C++ 程序以某种方式忽略了前 2 个质数,同时将 1 保持为质数。

这是用 C++ 编写的相同程序

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
int low, high;
cout << "Enter lower bound: ";
cin >> low;
cout << "Enter upper bound: ";
cin >> high;

int root = floor(sqrt(high));
int primes[high];

for(int i = 2; i <= high; i++)
{
    primes[i] = true;
}

for (int i = 2; i <= root; i++) {
    if (primes[i]) {
        for (int j = i * i; j <= high; j += i) {
            primes[j] = false;
        }
    }
}

for (int i = 2; i <= root; i++) {
    if(primes[i]) {
        int segmentStart = ceil(low/i) * i;

        if (primes[segmentStart]) segmentStart += i;

        for(int j = segmentStart; j <= high; j+=i) {
            primes[j] = false;
        }
    }
}

for(int i = low; i <= high; i++) {
    if(primes[i]) {
        cout << i;
    }
}

return 0;
}

最佳答案

找到解决方案。

low/i int segmentStart = ceil(low/i) * i; 中的除法运算返回一个整数,因此忽略结果 < 1;

我将 i 类型转换为 double 来解决这个问题,如下所示:

int segmentStart = ceil(low/(double)i) * i;

关于javascript - 同一个JS程序在C++中的不同实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39312824/

相关文章:

javascript - Python 中的 Web 套接字(使用 flask )问题

javascript - 如何定位一个 web 组件 wrt 窗口?

c++ - 创建 Visual C++ 中缺少的 GUID 菜单项

c++ - C/C++ 编译器如何为某些 C 函数调用自动推断数组长度?

javascript - jQuery根据下一个元素更改td的类

javascript - 这个变量从哪里来?

c++ - c++中new的返回类型是什么?

c++ - 在二叉搜索树中搜索一个值

c++ - OpenCV 和 C++ : Error with Traincascade: A Practical Issue

javascript - React.js 插入另一个组件的 ref