0
点赞
收藏
分享

微信扫一扫

Prime Time

那小那小 2022-08-22 阅读 40


​​Prime Time ​​

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll maxn=10010;
ll p[maxn];
//再问有多少素数是由公式产生:n^2+n+41
//原来这道题是说,这个题问的是,有多少公式在一定的区间产生的数,有多少是素数。
//判断是不是素数
int isprime(int n)
{
int j;
for(j=2;j<=sqrt(n);j++)
{
if(n%j==0)
return 0;//不是素数
}
return 1; //是素数
}

//公式产生的数有多少是素数
void num()
{
ll m;
p[0]=1;
for(int i=1;i<=maxn;i++)
{
m=i*i+i+41;
if(isprime(m))
{
p[i]=p[i-1]+1;
}
else
p[i]=p[i-1];
}

}

int main()
{
num();
int a,b;
while(~scanf("%d%d",&a,&b))
{
double ans=(p[b]-p[a]+isprime(a*a+a+41))*1.0/(b-a+1)*100.0;//此处p[]中存储的是每一个n对应的是之前有多少个素数
printf("%.2lf\n",ans+1e-5);//啧啧这个1e-5 恩我的大佬告诉我,后来看到别人是1e-8不知道有什么区别 但是 不加就是错的 (b-a+1)是因为a<=n<=b
}
return 0;
}

刚才查了一下为啥要加1e-5=0.00001这样是为了高精度!!


举报

相关推荐

0 条评论