分析:题目给出一个公式f(n)=n*n+n+41,输入a和b,0<=a<=b<=10000,
问在区间[a,b]中满足f(k)是素数的数所占的百分比。
b的范围不大,直接暴力素数打表即可。
最后输出保留两位小数,卡精度,必须在结果加上1e-5(或者更小)保证精度。
例如,输入 6000 9999,不加1e-5输出37.67(真实值为37.675),加上1e-5输出37.68。
#include<cstdio> bool a[100010042]; void f() { for(int i=4;i<100010042;i+=2) a[i]=1; for(int i=3;i<100010042;i++) { if(a[i]==0) { for(int j=i+i;j<100010042;j+=i) a[j]=1; } } } int ans[10011]; int main() { f();ans[0]=1; for(int i=1;i<10001;i++) { if(!a[i*i+i+41]) ans[i]=1; ans[i]+=ans[i-1]; } int a,b; while(scanf("%d%d",&a,&b)!=-1) if(a==0) printf("%.2lf ",100*(double)ans[b]/((b+1)*1.0)+1e-5); else printf("%.2lf ",100.0*(1.0*(ans[b]-ans[a-1]))/(1.0*(b-a+1))+1e-5); return 0; }