Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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
C++ 循环素数,帮助查找错误,C++;_C++_Primes - Fatal编程技术网

C++ 循环素数,帮助查找错误,C++;

C++ 循环素数,帮助查找错误,C++;,c++,primes,C++,Primes,花了一个小时试图找出一个错误,但没有成功:( 解决欧拉问题: 看来我的脑袋现在不工作了 代码未优化,对此表示抱歉(我在这里做错了什么?) 正确答案是55,我的程序给我22 #include "euler.hpp" #include <algorithm> int main() { euler::prime_generator<euler::eratosthenes_sieve> gen; gen.range(0, 1000000); unsign

花了一个小时试图找出一个错误,但没有成功:(
解决欧拉问题:
看来我的脑袋现在不工作了

代码未优化,对此表示抱歉(我在这里做错了什么?) 正确答案是55,我的程序给我22

#include "euler.hpp"
#include <algorithm>

int main() {
    euler::prime_generator<euler::eratosthenes_sieve> gen;
    gen.range(0, 1000000);
    unsigned c = 0; // number of circular primes
    unsigned p = 0; // number of primes (test)
    unsigned prime;
    while(prime = gen.nextPrime()) {
        p++;
        bool ok = true;
        std::vector<unsigned> pv = euler::number2vector(prime);
        if(pv.size() > 1) {

            bool cont = false;
            for(unsigned i = 0; i < pv.size(); ++i) {
                if(pv[i] % 2 == 0) { cont = true; break; }
            }
            if(cont) continue;
            std::sort(pv.begin(), pv.end());

            do {
                if(!gen.isPrime(euler::array2number(&pv[0], pv.size()))) {
                    // was desperate and made this
                    if(euler::isPrime(euler::array2number(&pv[0], pv.size()))) {
                        std::cout << prime << " -> " << euler::array2number(&pv[0], pv.size()) << std::endl;
                    }
                    else ok = false;
                    break;
                }
            } while(std::next_permutation(pv.begin(), pv.end()));

        }
        if(ok) {
            //std::cout << prime << std::endl;
            c++;
        }
        //std::cout << prime << std::endl;
    }

    std::cout << p << " -> " << c << std::endl;

    euler::pause();
}
#包括“euler.hpp”
#包括
int main(){
euler::prime_生成器gen;
一般范围(1000000);
无符号c=0;//循环素数的数目
无符号p=0;//素数(测试)
无符号素数;
while(prime=gen.nexttime()){
p++;
bool ok=true;
std::vector pv=euler::Number2向量(素数);
如果(pv.size()>1){
bool cont=false;
for(无符号i=0;i这个问题已经解决了很多次了。搜索“[c++]素数euler”

for
循环的终止条件给出了证据:

sqrt(upper_bound - lower_bound)
我在你的帖子中找不到
primes[]
的定义。
range
函数访问它,但它不是通过参数提供的,也不是在函数中声明的
primes
数组


通过搜索SO和web,您可以获得大量信息。在发布之前请尝试。

尝试将您的代码缩小到您认为错误的功能,大多数人不会通读您的全部代码。是的,我知道。但我重新检查了每个功能。如果我不是那么绝望,我永远不会在这里发布:(但感谢您的回答问题在于您的代码有多长,在每个函数中添加小cout语句以观察它正在执行的操作。这是一项乏味的工作,但它将有助于调试您的程序。在project Euler中,大多数时间的问题都包含针对较小问题空间的解决方案(对于您的问题,它列出了循环素数,直到100)。您的代码适用于该简单情况吗?如果不适用,请检查返回的数字。如果有错误的数字,请使用调试器找出这些情况下发生的情况。如果缺少一些,请调试这些情况下发生的情况。指示问题已解决的方法是接受答案,而不是更新问题及其标题。如果现有的答案都不能解决您的问题,请随意发布您自己问题的答案并接受。是的,我知道在哪里找到正确的解决方案,我也知道如何以另一种方式解决任务。问题是为什么此代码不起作用,因为我觉得一切都很好。下限没有任何作用,我没有完成primes[]是一个向量。我粘贴了class方法,所以代码没有那么大,而且long@AleksandrBelkin要求审查您的特定代码的地方是。@WillNess谢谢,我不知道!将在1年内的下一次发布那里可能不会有“很多次这样”。请尽量提供一些信息来源,就我个人而言,当我进入一个论坛时,我会感到非常沮丧,我读到的第一件事是“在别处搜索”@Default:正如我所说,已经有太多的Euler素数帖子。我使用谷歌,“stackoverflow Euler素数”,这就是我得到的:
sqrt(upper_bound - lower_bound)