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)