ACM 10200 Q10200: Prime Time
作法 : 先建表存放是否為質數....
※注意精準度
/*********************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int math[5200]={0};
int p;
int prime()
{
char num[100000]={0};
int a,b,m=0;
for(a=2;a<50000;a++)
if(num[a]==0)
{
math[m]=a;
m++;
for(b=2;a*b<=50000;b++)
num[a*b]=1;
}
return m;
}
int primeJudge (int num)
{
int a,yes=0,s=(int)sqrt(num);
for(a=0;a<p&&math[a]<=s;a++)
if(num%math[a]==0)
{yes=1;break;}
if(yes==0)
return 1;
else
return 0;
}
main()
{
p=prime();
int PrimeTime[10001]={0},a,n,m;
PrimeTime[0]=1;
for(a=1;a<=10000;a++)
PrimeTime[a]=primeJudge(a*a+a+41);
while(scanf("%d %d",&n,&m)==2)
{
double s=m-n+1,pp=0;
for(a=n;a<=m;a++)
pp+=PrimeTime[a];
int ss=pp*100000/s;
if(ss%10>=5) ss=ss+10;
printf("%d.%02d\n",ss/1000,ss%1000/10);
}
return 0;
}