Почему переменная размера в случае больших значений не верна?
Мне нужно найти n-е простое число, в этом случае я использую алгоритм Эратосфена, но у меня есть некоторое непонимание переменной размера, почему она дает ошибку. Простые числа растут по некоторому шаблону, начиная с 5, я использовал этот шаблон для оценки размера.
<pre>#include <iostream> #include <vector> #include <cmath> long long getNthPrime(int n) { long long size=n+8*(n+2); std::vector<char>is_prime(size+1, 't'); is_prime[0]=is_prime[1]='f'; int count=0; for(long long i=2; i<=size; i++) { if(is_prime[i]=='t') { count++; if(count==n) { return i; } for(long long j=i*i; j<=size; j+=i) { is_prime[j]='f'; } } } } int main() { int k; int n; std::cin >> k; int arr[k]; for (int i = 0; i < k; i++) { std::cin >> n; arr[i] = n; } for (int i = 0; i < k; i++) { std::cout << getNthPrime(arr[i]) << std::endl; } }
Что я уже пробовал:
Я попытался отладить код.
Patrice T
и вы планируете сообщить об ошибке сообщение ?
Member 13277493
нет, мне просто нужно напечатать n-е простое число для каждого входного сигнала
Richard MacCutchan
Какая ошибка? Пожалуйста, не ждите, что люди догадаются, что вы видите на экране.
Rick York
При поиске простых чисел стандартная тактика состоит в том, чтобы проверить 2, затем 3, а затем пропустить 2 (а не 1!). Это происходит потому, что после проверки на множители 2 нет необходимости проверять любые другие четные числа. Там все еще будет несколько избыточных проверок, но намного меньше, чем если бы вы также проверили эвены.