#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=1e4+5;
const double esp=1e-8;
int sum[maxn];
/*
a<=n<=b, m=n*n+n+41
在区间[a,b] m为素数概率的多大
*/
//素数判断
bool is_prime(int n)
{
int m=sqrt(n);
for(int i=2;i<=m;i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
//预处理区间素数个数
void init()
{
sum[0]=1;
for(int i=1;i<maxn;i++)
{
int n=i*i+i+41;
sum[i]=0;
if(is_prime(n))
{
sum[i]=sum[i-1]+1;
}
else
{
sum[i]=sum[i-1];
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
init();
int a,b;
while(~scanf("%d%d",&a,&b))
{
double ans=(sum[b]-sum[a-1])*1.0/((b-a+1)*1.0);
ans*=100.0;
//计算结果+esp,进行四舍五入,避免精度丢失
printf("%.2lf\n",ans+esp);
}
return 0;
}
UVA - 10200 Prime Time (素数判断)
最新推荐文章于 2020-03-08 19:50:52 发布