Я решал вопрос в Hackerrank, и вопрос заключался в том, чтобы найти количество простых чисел в диапазоне. Поскольку при использовании обычной методологии ожидался тайм-аут, я использовал Сито Эратосфена. Большинство тестов работали, за исключением двух скрытых тестов. Я запустил код в компиляторе GDB и выяснил, что код поддерживает только значения до 6 миллионов. Что мне делать? Код приведен ниже:
#include<cstring>
#include<cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
void SieveOfEratosthenes(unsigned long long int a,unsigned long long int b)
{
unsigned long long int count=0;
bool prime[b+1];
memset(prime, true, sizeof(prime));
for (unsigned long long int p=2; p*p<=b; p++)
{
// If prime[p] is not changed, then it is a prime
if (prime[p] == true)
{
for (unsigned long long int i=p*p; i<=b; i += p)
prime[i] = false;
}
}
for (unsigned long long int p=a; p<b; p++)
if (prime[p] &&p!=1)
count++;
cout<<count;
}
int main()
{
unsigned long long int a,b;
cin>>a>>b;
SieveOfEratosthenes(a,b);
return 0;
}