【质数】UVA 10200 Prime Tree (试除法判定素数,eps常量)详解

题目链接:https://vjudge.net/problem/UVA-10200

题目大意:
给定f(n)= n^2+n+41

求n∈[a,b],有多少n满足f(n) 为质数,输出其所占百分比

分析:

数据量不大,试除法判断是否为素数并打表即可。

注意点:题目要求四舍五入(rounded to two decimal digits)

因为double类型的精度问题,一个理论值为0.0500000000000的值可能会被算成0.49999999999999,所以给答案加上eps常量以抹除误差

eps是epsilon的缩写,即希腊字母ε,常用来表示无穷小(想起了高中物理老师经常把它读成E普赛隆2333)

ACM中eps常量一般取1e-8

代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#define eps 1e-8
using namespace std;

int num[10005];
bool Isprime[10005];

void excel(){
   for(int i=0;i<40;i++)  Isprime[i]=1,num[i]=i+1;
   for(long long i=40;i<=10000;i++){
      num[i]=num[i-1];
      long long t=i*i+i+41;

      int flag=1;
      for(int j=2;j*j<=t;j++)
        if(t%j==0) {flag=0; break;}
      if(flag)  Isprime[i]=1,num[i]++;
   }
}

int main()
{
    excel();
    int a,b;
    while(~scanf("%d%d",&a,&b)){
        int n=num[b]-num[a];
        if(Isprime[a])   n++;
        double ans=(double)n*100/(1.0*(b-a+1));
        printf("%.2f\n",ans+eps);
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值