https://zh.wikipedia.org/wiki/%E8%B4%9D%E5%88%A9-%E6%B3%A2%E5%B0%94%E6%B8%A9-%E6%99%AE%E5%8A%B3%E5%A4%AB%E5%85%AC%E5%BC%8F

http://blog.csdn.net/meopass/article/details/78327614

这类公式是用来求解一些无理数常数的公式,特点是不需要求解前n-1位也能去算第n位

假设你得到了PI,那么你求十六进制下第n位,只需要把在16进制下的小数点挪到第n-1位和第n位之间,即*16^(n-1),然后去掉整数部分,小数部分再乘16得到的整数部分即是第n位咯

那么如此一来,我们要计算的就是这小数部分咯

对于原累加式,乘16^(n-1)后,由于整数部分可以不管它,那么就让16^(n-1)mod对应的分母,这样小数部分已然不变

对于前n-1项可以如此,那么对于第n项到正无穷项,为了保持精度应该算多少嘞

首先分析精度,小数部分*16得到整数部分就是第n位,小数部分的精度应该要保证*16不影响整数位,对于第n项到正无穷项,对于小数部分的误差是可以允许的

假设最极端的情况下计算小数点后1位,那么要计算的第n项是0.008089 已经小于1e-2 ,乘16的误差也在1e-1以内,如此一来,当n比较大的时候,误差会更小,应该是可以放弃计算第n项到后面的

#include <bits/stdc++.h>using namespace std;
#define maxn 100010
#define LL long long
//#define double long double
LL quickpower(LL a,LL b,LL MOD )
{LL r=1;while(b>0){if(b&1LL)r=r*a%MOD;a=a*a%MOD;b>>=1LL;}return r;
}
double BBP(int n,double a,double b){double r=0;for(int k=0;k<=n;k++) r+=quickpower(16,n-k,8*k+b)*1.0/(k*8.0+b);// for(int k=n+1;k<=n+1000;k++) r+=1/(k*8.0+b)/pow(16,k-n);return r*a;
}
double BBPformular(int n){return BBP(n,4,1)+BBP(n,-2,4)+BBP(n,-1,5)+BBP(n,-1,6);
}int main(){
#ifdef shuaishuaifreopen("C:\\Users\\hasee\\Desktop\\a.txt","r",stdin);// freopen("C:\\Users\\hasee\\Desktop\\b.txt","w",stdout);
#endifint t;scanf("%d",&t);for(int c=1;c<=t;c++){int n;scanf("%d",&n   );n--;double r=BBPformular(n);r=r-(LL)r;// printf("%.10f\n",r);if(r<0)r+=1.0;r*=16;int res=r;//printf("res:%d r*16:%f\n",res,r);printf("Case #%d: %d %c\n",c,n+1,res>9? res-10+'A':res+'0');}return 0;
}

转载于:https://www.cnblogs.com/MeowMeowMeow/p/7787729.html

hdu 6217 A BBP Formula 公式题相关推荐

  1. HDOJ(HDU) 2139 Calculate the formula(水题,又一个用JavaAC不了的题目)

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) 看到这个时间,我懵逼了... 果然,J ...

  2. BBP算法计算圆周率(BBP Formula HDU - 6217)

    概述 BBP算法求圆周率π,它的优点在于可以直接求出圆周率的某一位d开始的一串数字,而不依赖于第d位之前的数字,传统的算法需要一位位地求.BBP算法节省了一大部分时间和内存,但BBP所求的圆周率是用1 ...

  3. 【BBP 算法】HDU 6217

    1.最近看到有学弟在说BBP算法,然后就写一下这个东东. 2.BBP其实是三个人,然后这个算法是干嘛的嘞,其实是快速的求某些无理数的第n为数字或者第n位以后的一串数字.比如求PI,log2,log3等 ...

  4. 【秃头系列】-【本科生毕设论文格式Word】自动生成图表公式题注并交叉引用

    文章目录 01 - 论文的图.表.公式和题注 02 - 如何自动生成 2.1 - 格式约定 2.2 - 设置图的题注 2.3 - 设置表的题注 2.4 - 设置公式的题注 03 - 题注的交叉引用 3 ...

  5. HDU 6217 BBP Formula (数学)

    题目链接: HDU 7217 题意: 题目给你可以计算 \(π\) 的公式: \(\pi = \sum_{k=0}^{\infty}[\frac{1}{16^k}(\frac{4}{8k+1})-(\ ...

  6. hdu 6217 BBP Formula

    题目链接 求PI的十六进制表示的小数点后第n位是多少,看其他博主说要求第n位,只需要把16进制下的小数点挪到第n-1位和第n位之间,即*16^(n-1),然后去掉整数部分,小数部分再乘16得到的整数部 ...

  7. 【HDU 6217 2017ACM/ICPC亚洲区沈阳站】BBP Formula

    BBP算法的一个模板 #include <cstdio> #include<iostream> using namespace std; typedef long long l ...

  8. HDU杭电OJ经典100题2000-2099_Java版详细题解(持续更新)

    今年寒假打算用Java把杭电2000-2099全部AC(现在持续更新),如下是题目链接,之后是我的题解,全部做完后我会把所有AC的题解打包上传的 题号 题名 题号 题名 2000 ASCII码排序 2 ...

  9. HDU 1018.Big Number-Stirling(斯特林)公式 取N阶乘近似值

    最近一堆题目要补,一直咸鱼,补了一堆水题都没必要写题解.备忘一下这个公式. Stirling公式的意义在于:当n足够大时,n!计算起来十分困难,虽然有很多关于n!的等式,但并不能很好地对阶乘结果进行估 ...

最新文章

  1. node.js是开源的吗_为开源做贡献并不难:我为Node.js项目做贡献的旅程
  2. const和static readonly 区别
  3. myeclipse中配置weblogic的开发环境
  4. 云计算服务定义及优劣势—Vecloud微云
  5. 蜗杆参数法设计_技术贴 | 减速器结构及设计的注意事项
  6. 同步,异步,多线程,你怎么看?
  7. frontcon函数用不了_C++复制构造函数与析构函数
  8. 图解 CSS (1): 先做一个样式表测试工具
  9. Flink学习笔记04:将项目打包提交到Flink集群上运行(Scala版)
  10. SHELL 003 -- ss命令常用方法
  11. python 全局解释器锁_python全局解释器锁(GIL)
  12. win7从光盘进入修复计算机,怎么用光盘修复win7_win7如何用光盘修复系统
  13. word里怎么在右上角添加标注[1]
  14. 案例分析:从误删除数据库血案看数据库系统的安全设计
  15. layui开关按钮及代码实现
  16. 服务器故障与主板维修,服务器主板故障
  17. 虚拟 IO 服务器(VIOS)和 IBM i
  18. python_split()函数使用方法
  19. 开发避坑2——大鸟 pk Bug2(SVN报错:database disk image is malformed
  20. nginx gzip压缩

热门文章

  1. 那些与耐克“作对”的品牌现在怎么样了
  2. 如何使用远程桌面连接远程计算机?
  3. 小程序团购商品CPS接入,实现达人分佣模式
  4. 2022.01.26翻译Watermelon
  5. php球鞋,行家啊?!这些球鞋外号你必须要知道!
  6. SM2算法第十二篇:数字证书原理
  7. 实探java对象的内存布局
  8. 计算机专业认知存在的问题,浅谈新形势下计算机专业存在的问题与对策
  9. Linux中ctrl+f2进入编辑模式后,localhost怎么输入密码都不对
  10. 计算机音乐最早出现,电脑一直无缘无故出现音乐是为什么?