浮点数的精度误差,一般用1e-8和1e-6来处理。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int num[10005];
bool check(ll n)
{
if(n<2)
return false;
for(ll i=2;i*i<=n;i++)
if(n%i==0)
return false;
return true;
}
void init()
{
num[0]=1;
for(int i=1;i<=10000;i++)
{
ll t=i*i+i+41;
if(!check(t))
num[i]=num[i-1];
else
num[i]=num[i-1]+1;
}
}
int main()
{
init();//直接预处理,时间复杂度的估算
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
int ans=0;
if(a>0)
ans=num[b]-num[a-1];
else ans=num[b];
printf("%.2lf\n",ans*100.0/(b-a+1)+0.0000001);//精度上的误差
}
return 0;
}