我试图通过编写一个计算特定数字的素数的程序来教自己一些CPP。我在Win 8.1 Pro(x64)的第三代i5@2.8GHz(x4)和8GB内存的笔记本电脑上使用Visual Studio Express 2013。我是cpp的新手(可能很明显),但我希望让这个程序在6657以后运行得更高。任何想法都将不胜感激!
编辑:这个程序的新版本按预期工作并使用向量。谢谢你的帮助!
/*
* Prime finder, starts at 2 works up, was working initially
* to 6658, now can run to 150000(highest tested yet) in ~17m25s.
* May need optimization. Uses vector size to check for nth number.
* Must have #include <vector>
*/
std::vector<int> prime; // required for program to work.
int primes(unsigned y){
using namespace std;
unsigned b = 0;
bool z = true; prime.push_back(2);
for (b = 2; prime.size() <= y; b++){
if (b % 2 == 0 && b < y){ b++; }//catches even numbers.
//finds primes to the nth integer
/*decrementing in this loop produced a strange
*end count, used increments instead counts fixed
*and program completes sooner.
*/
for (unsigned j = 2; j < prime.size(); j++){
//if (j > y){ return 0; }//catches infinite loop
if (prime.at(j) >= (b/2))
//removes unneccessary checking
{break;}
if (b%prime.at(j) == 0)
{z = false; j = prime.size();}
}
if (z == true){ prime.push_back(b); }
z = true;
}
}return 0;
}
答案 0 :(得分:4)
这一行
int prime [] = {0}; //程序运行所必需的。必须初始化。
为正好一个素数创建空间。
因此,当prime[1]
,prime[j-1]
的{{1}}或j > 1
prime[a]
的值为a > 1
时,您将超出数组范围。< / p>
您需要:
vector<int> prime
和prime.push_back(i);
int prime[SOMENUMBER] = { 0 };
使用vector<int>
还有一个好处,就是您不需要使用素数存储prime[0]
。相反,你有一个prime.size()
函数,告诉你有多少元素。
答案 1 :(得分:3)
int prime[] = {0};
该数组的大小仅为1,但您稍后会使用较大的索引。这不应该适用于除零之外的任何其他值,但出于某种原因你很幸运。尝试增加数组大小或使用动态数据。