我正在研究一个相对简单的问题,该问题基于将某个值下的所有素数相加。我写了一个程序来完成这个任务。我正在使用长类型变量。当我达到更高的数字(~200/300k)时,我用来跟踪总和的变量变为负数,尽管没有添加负值(基于我的知识和我所做的一些测试) . 数据类型是否有问题,或者我遗漏了什么。
我的代码如下(在 C++ 中)[向量基本上是一个动态数组,以防人们想知道]:
bool checkPrime(int number, vector<long> & primes, int numberOfPrimes) {
for (int i=0; i<numberOfPrimes-1; i++) {
if(number%primes[i]==0) return false;
}
return true;
}
long solveProblem10(int maxNumber) {
long sumOfPrimes=0;
vector<long> primes;
primes.resize(1);
int numberOfPrimes=0;
for (int i=2; i<maxNumber; i++) {
if(checkPrime(i, primes, numberOfPrimes)) {
sumOfPrimes=sumOfPrimes+i;
primes[numberOfPrimes]=long(i);
numberOfPrimes++;
primes.resize(numberOfPrimes+1);
}
}
return sumOfPrimes;
}