Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions C++/All Sieve Functions.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
bool Not_prime[N]={};
bool IsPrime(int n)
{
if (n==2)
return true;
if (n<2||n%2==0)
return false;
for (int i=3; i*i<=n; i+=2)
if (n%i==0)
return false;
return true;
}
vector<ll>divisors;
void Divs(ll n)
{
for (ll i=1; i*i<=n; ++i)
{
if (n%i==0)
{
divisors.push_back(i);
if (!(i*i==n))
divisors.push_back(n/i);
}
}
}
ll NoofDivisors(ll n)
{
ll cnt=1;
for (ll i=2; i*i<=n; ++i)
{
int power=0;
while (n%i==0)
{
n/=i;
++power;
}
cnt*=(power+1);
}
if (n>1)
cnt*=2;
return cnt;
}
int number_of_divisors[N]= {};
void Sieve_NoofDivisors(int n)
{
number_of_divisors[0]=number_of_divisors[1]=1;
for (int i=2; i*i<=n; ++i)
if (!number_of_divisors[i])
for (int j=i; j<n; j+=i)
{
int e=0;
int q=j;
while (q%i==0)
{
++e;
q/=i;
}
if(number_of_divisors[j])
number_of_divisors[j]*=(e+1);
else
number_of_divisors[j]=(e+1);
}
}
vector<int> primes;
void prime_fact(ll n)
{
bool ok=false;
for(ll i = 2 ; i * i <= n ; i++)
{
while(n % i == 0)
{
ok=1;
n /= i;
}
if(ok)
primes.push_back(i);
ok=0;
}
if(n > 1)
primes.push_back(n);
}
void Sieve()
{
Not_prime[0]=Not_prime[1]=true;
for (ll i=2; i*i<=N; ++i)
if (!Not_prime[i])
for (ll j=i*i; j<=N; j+=i)
Not_prime[j]=true;
}
int cntPrime[N];
void seive()
{
for(ll i=2; i<N; i++)
{
if(cntPrime[i])
continue;
for(ll j=i; j<N; j+=i)
{
cntPrime[j]++;
}
}
}
56 changes: 56 additions & 0 deletions C++/Primes on Interval-237-C.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 5;

typedef long long ll;

int a, b, k;
int cntPrimes[N];
bool notPrime[N];

void seive()
{
notPrime[0] = notPrime[1] = true;
for(ll i = 2; i < N; i++)
{
if(notPrime[i]) continue;
for(ll j = i * i; j < N; j += i)
{
notPrime[j] = true;
}
}
for(int i = 2; i < N; i++)
{
cntPrimes[i] += cntPrimes[i - 1] + (!notPrime[i]);
}
}

bool valid(int l)
{
for(int i = a; i + l - 1 <= b; i++)
{
if(cntPrimes[i + l - 1] - cntPrimes[i - 1] < k) return false;
}
return true;
}

int main()
{
seive();
scanf("%d%d%d", &a, &b, &k);
int s = 1, e = b - a + 1, mid, l = -1;
while(s <= e)
{
mid = s + (e - s) / 2;
if(valid(mid))
{
l = mid;
e = mid - 1;
}
else s = mid + 1;
}
printf("%d\n", l);
return 0;
}