Pagini recente » Cod sursa (job #1752815) | Cod sursa (job #1704345) | Cod sursa (job #752537) | Cod sursa (job #1919186) | Cod sursa (job #775537)
Cod sursa(job #775537)
#include<iostream>
#include<fstream>
#include<bitset>
using namespace std;
bitset <1001> d;
int v[100001],a[100001];
void ciur(int n)
{
int i,j;
d[0]=1;
d[1]=1;
for(i=2;i<=n;i++)
if(d[i]==0)
for(j=i+i;j<=n;j=j+i)
d[j]=1;
}
int cautarebinara(int p, int q, int x)
{
int mij,st,dr,aux;
st=p;
dr=q;
while(p<q) {
mij=(p+q)/2;
if(x>=a[mij])
p=mij+1;
else q=mij;
}
mij=(p+q)/2;
if(a[mij]>x)
mij--;
aux=mij;
p=st;
q=dr;
while(p<q) {
mij=(p+q)/2;
if(x>a[mij])
p=mij+1;
else q=mij;
}
mij=(p+q)/2;
if(a[mij]>x)
mij++;
return aux-mij+1;
}
int main ()
{
int n,k,i,nr;
ifstream f("kprime.in");
ofstream g("kprime.out");
f>>n>>k;
for(i=1;i<=n;i++)
f>>v[i];
f.close();
ciur(1000);
for(i=1;i<=n;i++) {
a[i]=a[i-1];
if(d[v[i]]==0)
a[i]++;
}
nr=0;
for(i=k;i<=n;i++)
if(a[i]>=k)
nr=nr+cautarebinara(0,i,a[i]-k);
g<<nr;
g.close();
return 0;
}