• UVA10200Prime Time判断素数个数(打表预处理)+精度控制


    题意:

    给出a、b区间,判断区间内素数所占百分比

    思路:

    注意提前打表和控制精度1e-8的范围足够用了

    细节:

    精度的处理

    判断素数的方法(且返回值为bool)

    数据类型的强制转换

    保存素数个数

    提前进行打表和保存区间素数个数,每次给出a、b直接输出答案就行。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 using namespace std;
     5 //const int N=40*40+40+41;
     6 const int N=10020;
     7 
     8 int ans[N];
     9 bool pr(int x)//判断素数
    10 {
    11     for(int i=2; i*i<=x; i++)
    12     {
    13         if(x%i==0)
    14             return 0;
    15     }
    16     return 1;
    17 }
    18 
    19 void db()
    20 {
    21     // ans[0]=0;
    22 //   memset(ans,0,sizeof(ans));
    23 //    for(int i=0; i<=N; i++)
    24 //        ans[i]=ans[i-1]+pr(i*i+i+41);
    25     ans[0]=1;
    26     for(int i=1; i<=N; i++)
    27         ans[i]=ans[i-1]+pr(i*i+i+41);
    28 }
    29 
    30 int main()
    31 {
    32     db();
    33     int a,b;
    34     while(~scanf("%d %d",&a,&b))
    35     {
    36 //        int sum=0;
    37 //        for(int i=a;i<=b;i++)
    38 //            sum+=prime(i);
    39         int sum=b-a+1;
    40         //   printf("%.2f\n",((ans[b]-ans[a-1])/sum)*100.0+1e-8);//这样的话第二三组数据输出为0.00
    41         //*100.0得放在分子上,相除后再*100.0是错误的
    42         printf("%.2f\n",(100.0*(ans[b]-ans[a-1])/sum)+1e-8);
    43         // printf("%.2f\n",sum*1.0/(ss*1.0)+1e-8);
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    冲刺博客 五
    冲刺博客 四
    冲刺第一天
    软件工程概论第十周学习进度
    软件工程概论第九周学习进度
    找水王
    软件工程概论第八周学习进度
    软件工程概论第七周学习进度
    四则运算最终版
    二维数组最大值
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11469821.html
Copyright © 2020-2023  润新知