我一定不会承认在看到题解前根本没懂这题啥意思==
呜呜呜早知如此何必当初
筛素数,学长说二不二分无所谓。。
筛素数什么的就是提前把范围内所有素数都先存起来,之后要用到的时候直接用得了
#include<stdio.h>
#include<string.h>
#define max 1000010
int p[max],s[max],a,b,k;
void prime()
{
for(int i=2;i<=max;i++)
{
s[i]=s[i-1];
if(p[i])continue;
s[i]++;
for(int j=i+i;j<max;j+=i)
p[j]=1;
}
}
bool check(int mid)
{
for(int i=a;i<=b-mid+1;i++)
{
if(s[i+mid-1]-s[i-1]<k)return 0;
}
return 1;
}
int main()
{
prime();
while(scanf("%d%d%d",&a,&b,&k)!=EOF)
{
int ans,l=1,r=b-a+1;
if(s[b]-s[a-1]<k)
{
printf("-1\n");
continue;
}
while(l<=r)
{
int mid=(l+r)/2;
if(check(mid)){ans=mid;r=mid-1;}
else l=mid+1;
}
printf("%d\n",ans);
}
return 0;
}