hdu 6217 A BBP Formula 公式题
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 公式题相关推荐
- HDOJ(HDU) 2139 Calculate the formula(水题,又一个用JavaAC不了的题目)
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) 看到这个时间,我懵逼了... 果然,J ...
- BBP算法计算圆周率(BBP Formula HDU - 6217)
概述 BBP算法求圆周率π,它的优点在于可以直接求出圆周率的某一位d开始的一串数字,而不依赖于第d位之前的数字,传统的算法需要一位位地求.BBP算法节省了一大部分时间和内存,但BBP所求的圆周率是用1 ...
- 【BBP 算法】HDU 6217
1.最近看到有学弟在说BBP算法,然后就写一下这个东东. 2.BBP其实是三个人,然后这个算法是干嘛的嘞,其实是快速的求某些无理数的第n为数字或者第n位以后的一串数字.比如求PI,log2,log3等 ...
- 【秃头系列】-【本科生毕设论文格式Word】自动生成图表公式题注并交叉引用
文章目录 01 - 论文的图.表.公式和题注 02 - 如何自动生成 2.1 - 格式约定 2.2 - 设置图的题注 2.3 - 设置表的题注 2.4 - 设置公式的题注 03 - 题注的交叉引用 3 ...
- HDU 6217 BBP Formula (数学)
题目链接: HDU 7217 题意: 题目给你可以计算 \(π\) 的公式: \(\pi = \sum_{k=0}^{\infty}[\frac{1}{16^k}(\frac{4}{8k+1})-(\ ...
- hdu 6217 BBP Formula
题目链接 求PI的十六进制表示的小数点后第n位是多少,看其他博主说要求第n位,只需要把16进制下的小数点挪到第n-1位和第n位之间,即*16^(n-1),然后去掉整数部分,小数部分再乘16得到的整数部 ...
- 【HDU 6217 2017ACM/ICPC亚洲区沈阳站】BBP Formula
BBP算法的一个模板 #include <cstdio> #include<iostream> using namespace std; typedef long long l ...
- HDU杭电OJ经典100题2000-2099_Java版详细题解(持续更新)
今年寒假打算用Java把杭电2000-2099全部AC(现在持续更新),如下是题目链接,之后是我的题解,全部做完后我会把所有AC的题解打包上传的 题号 题名 题号 题名 2000 ASCII码排序 2 ...
- HDU 1018.Big Number-Stirling(斯特林)公式 取N阶乘近似值
最近一堆题目要补,一直咸鱼,补了一堆水题都没必要写题解.备忘一下这个公式. Stirling公式的意义在于:当n足够大时,n!计算起来十分困难,虽然有很多关于n!的等式,但并不能很好地对阶乘结果进行估 ...
最新文章
- node.js是开源的吗_为开源做贡献并不难:我为Node.js项目做贡献的旅程
- const和static readonly 区别
- myeclipse中配置weblogic的开发环境
- 云计算服务定义及优劣势—Vecloud微云
- 蜗杆参数法设计_技术贴 | 减速器结构及设计的注意事项
- 同步,异步,多线程,你怎么看?
- frontcon函数用不了_C++复制构造函数与析构函数
- 图解 CSS (1): 先做一个样式表测试工具
- Flink学习笔记04:将项目打包提交到Flink集群上运行(Scala版)
- SHELL 003 -- ss命令常用方法
- python 全局解释器锁_python全局解释器锁(GIL)
- win7从光盘进入修复计算机,怎么用光盘修复win7_win7如何用光盘修复系统
- word里怎么在右上角添加标注[1]
- 案例分析:从误删除数据库血案看数据库系统的安全设计
- layui开关按钮及代码实现
- 服务器故障与主板维修,服务器主板故障
- 虚拟 IO 服务器(VIOS)和 IBM i
- python_split()函数使用方法
- 开发避坑2——大鸟 pk Bug2(SVN报错:database disk image is malformed
- nginx gzip压缩
热门文章
- 那些与耐克“作对”的品牌现在怎么样了
- 如何使用远程桌面连接远程计算机?
- 小程序团购商品CPS接入,实现达人分佣模式
- 2022.01.26翻译Watermelon
- php球鞋,行家啊?!这些球鞋外号你必须要知道!
- SM2算法第十二篇:数字证书原理
- 实探java对象的内存布局
- 计算机专业认知存在的问题,浅谈新形势下计算机专业存在的问题与对策
- Linux中ctrl+f2进入编辑模式后,localhost怎么输入密码都不对
- 计算机音乐最早出现,电脑一直无缘无故出现音乐是为什么?