题意:给你两个数a,b,求[a,b]内有多少个数满足f(n)=n*n+n+41是素数。
题解:预处理除前缀和,直接求
#include<cstring> #include<cstdio> #include<iostream> #include<algorithm> #include<cmath> #include<stack> #include<vector> #define N 10010 using namespace std; int n; int s[N]; bool ok(int x) { if(x==1||x==0)return false; for(int i=2; i*i<=x; i++) { if(x%i==0)return false; } return true; } void init() { for(int i=0; i<N; i++) { int k=i*i+i+41; if(ok(k))s[i]=1; else s[i]=0; } for(int i=1; i<N; i++)s[i]+=s[i-1]; } int main() { //freopen("test.in","r",stdin); init(); int a,b; while(~scanf("%d%d",&a,&b)) { int x=b-a+1; int y=s[b]; if(a!=0) y-=s[a-1]; double ans=y*100.0/(x*1.0)+1e-5;//精度 printf("%.2f\n",ans); } return 0; }
时间: 2024-11-14 16:31:49