Внедрение сита из эратосфена, а затем получение наивысшего простого фактора

Я застрял при попытке заставить сито работать. Когда я отлаживаю его, он говорит мне, что такие вещи, как 9 и 15, все еще оцениваются как истинные, когда они проходят через сито. Что вызывает это? Кроме того, правильно ли я использую вектор для получения наибольшего простого множителя?

#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;
}

-3

Решение

Следующее неверно:

                    for(long long j=pow(i, 2)+x*i; j<=n; j=pow(i, 2)+(++x*i))

И начальное значение, и выражение обновления для j неверны. Я оставляю это как упражнение, чтобы выяснить, что именно не так, и как это исправить.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]