私はふるいを働かせようとして立ち往生しています。デバッグすると、9 や 15 のようなものがふるいを通過しても true と評価されることがわかります。これは何が原因ですか?また、ベクトルを適切に使用して最高の素因数を取得していますか?
#include <iostream>
#include <vector>
#include <math.h>
int main()
{
long long n = 13195;
long long sqrtn = sqrt(n);
bool* boolarray = new bool[n];
for(long long i = 0; i<=boolarray[sqrtn]; i++) {
boolarray[i] = true;
}
long long x = 0;
for(long long i=2; i<=sqrtn; i++) {
if(boolarray[i]) {
for(long long j=pow(i, 2)+x*i; j<=n; j=pow(i, 2)+(++x*i))
boolarray[j] = false;
}
}
std::vector<long> primefactors;
for(long long i = 0; i<=sqrtn; i++)
{
if(boolarray[i] && n % boolarray[i] == 0)
primefactors.push_back(i);
}
int answer = primefactors.back();
printf("Answer: %i\n", answer);
_sleep(10000);
delete[] boolarray;
return 0;
}