HDU 6217 BBP Formula (数学)
题目链接: HDU 7217
题意:
题目给你可以计算 \(π\) 的公式:
\(\pi = \sum_{k=0}^{\infty}[\frac{1}{16^k}(\frac{4}{8k+1})-(\frac{2}{8k+4})-(\frac{1}{8k+5})-(\frac{1}{8k+6})]\)
告诉你可以求十六进制下的小数点后 \(π\) 的第 \(n\) 位,而不用计算前 \(n-1\) 项。
十六进制表示下,问你 \(π\) 的小数点后的第 \(n\) 位是多少 $ (1 ≤ n ≤ 100000)$ 。
Paper链接:
BBP Paper http://www.experimentalmath.info/bbp-codes/bbp-alg.pdf
简要题解:
其实看上面的 \(Paper\) 就知道怎么做了。
我简单解析一下。
把公式的第一项拿出来分析:
\(\sum_{k=0}^{\infty}\frac{1}{16^k}(\frac{4}{8k+1}) = \sum_{k=0}^{\infty}(\frac{4}{16^k(8k+1)}) = \sum_{k=0}^{\infty}(\frac{1}{16^k(8k+1)})\).
把公式拆分:
\(\sum_{k=0}^{\infty}(\frac{1}{16^k(8k+1)}) = \sum_{k=0}^{\infty}(\frac{1}{16^k(8k+1)}) = \sum_{k=0}^{n}(\frac{1}{16^k(8k+1)}) + \sum_{k=n + 1}^{\infty}(\frac{1}{16^k(8k+1)})\).
拆分之后我们就可以得到第 \(n\) 位。
将式子乘上 \(16^n\) ,使得小数点往后移动 \(n\) 位。
\([\sum_{k=0}^{n}(\frac{1}{16^k(8k+1)}) + \sum_{k=n + 1}^{\infty}(\frac{1}{16^k(8k+1)})]*16^{n}==> \sum_{k=0}^{n}(\frac{16^{n-k}}{(8k+1)}) + \sum_{k=n + 1}^{\infty}(\frac{16^{n-k}}{(8k+1)})\).
前一项 \(\sum_{k=0}^{n}(\frac{16^{n-k}}{(8k+1)})\) 为了避免高精度,可以化成 \(\sum_{k=0}^{n}(\frac{16^{n-k} mod (8k+1)}{(8k+1)})\).
后一项 \(\sum_{k=n + 1}^{\infty}(\frac{16^{n-k}}{(8k+1)})\) 就不用简化了,将 \(\infty\) 取够一定范围就可以了。
令 \(S_1 = \sum_{k=0}^{n}(\frac{16^{n-k}}{(8k+1)}) + \sum_{k=n + 1}^{\infty}(\frac{16^{n-k}}{(8k+1)})\).
那么,答案就是 \(4S_1 - 2S_2 - S_3 - S_4\)的小数部分。因为得到的只是小数部分,所以再乘以 \(16\) 后,得到的整数部分转化成十六进制就可以啦。
时间复杂度:\(O(nlogn)\)
所以,我是不是可以出一道关于计算二进制表示下的 \(log2\) 的题 ???
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
char print(int x)
{
if(x>=0 && x<=9)return x + '0';
return x+55;
}
ll qpower(ll a, ll b, ll mod)
{
ll res = 1;
while(b)
{
if(b & 1) res = a * res % mod;
b >>= 1;
a = a * a % mod;
}
return res;
}
double bbp(int n,ll k,ll b)
{
double res = 0;
for(int i=0;i<=n;i++)
{
res += (qpower(16,n-i,8*i+b) * 1.0/(8*i+b));
}
for(int i = n + 1;i <= n + 1000 + 1;i++)
{
res += (powf(16,n-i)* 1.0/(8*i+b));
}
return k * res;
}
int main()
{
int t,n;
cin>>t;
int cas = 1;
while(t--)
{
double ans = 0;
cin>>n;
n--;
ans = bbp(n,4,1) - bbp(n,2,4) - bbp(n,1,5) - bbp(n,1,6);
// cout<<"ans="<<ans<<endl;
ans = ans - (int)ans;
if(ans<0)ans+=1;
ans*=16;
char c ;
c = print(ans);
printf("Case #%d: %d %c\n",cas++,n+1,c);
}
return 0;
}
HDU 6217 BBP Formula (数学)的更多相关文章
- hdu 6217 A BBP Formula 公式题
题意 已知公式:$\pi=\sum_{k=0}^{\infty}\left[\frac{1}{16^{k}}\left(\frac{4}{8 k+1}-\frac{2}{8 k+4}-\frac{1} ...
- HDU 4342History repeat itself 数学
C - History repeat itself Time Limit:1000MS Memory Limit:32768KB Description Tom took the D ...
- HDU 4816 Bathysphere(数学)(2013 Asia Regional Changchun)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4816 Problem Description The Bathysphere is a spheric ...
- HDU 5584 LCM Walk 数学
LCM Walk Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5584 ...
- HDU 4336 Card Collector 数学期望(容斥原理)
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意简单,直接用容斥原理即可 AC代码: #include <iostream> ...
- HDU 5570 balls 期望 数学
balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5570 De ...
- hdu 4710 Balls Rearrangement (数学思维)
意甲冠军:那是, 从数0-n小球进入相应的i%a箱号.然后买一个新的盒子. 今天的总合伙人b一个盒子,Bob试图把球i%b箱号. 求复位的最小成本. 每次移动的花费为y - x ,即移动前后盒子编号 ...
- HDU 4790 Just Random 数学
链接:pid=4790">http://acm.hdu.edu.cn/showproblem.php?pid=4790 意:从[a.b]中随机找出一个数字x,从[c.d]中随机找出一个 ...
- HDU 1018-Big Number(数学)
Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
随机推荐
- Git 远程仓库默认权限问题的解决
多人共同开发维护一个项目时,对整个项目文件互有拉取.推送等行为.为防止操作时文件权限出现冲突,可有以下2种方法解决: 1. 本地git的远端设置中,连接远程仓库时多人使用同一个用户名,该用户名为git ...
- HttpClient方式调用接口的java 简单案例源码+附jar包
1 package com.itNoob.httpClient; import org.apache.commons.httpclient.HttpClient; import org.apache. ...
- 【Codeforces Round #424 (Div. 2) B】Keyboard Layouts
[Link]:http://codeforces.com/contest/831/problem/B [Description] 两个键盘的字母的位置不一样; 数字键的位置一样; 告诉你第一个键盘按某 ...
- CSUOJ 1651 Weirdo
1651: Weirdo Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 40 Solved: 21[Submit][Status][Web Board ...
- cogs 26. 分组
26. 分组 ★ 输入文件:dataa.in 输出文件:dataa.out 简单对比时间限制:1 s 内存限制:128 MB[问题描述] 现有 n 个学生, 要分成X1 ,X2 ,.. ...
- azure云中 mount: wrong fs type, bad option, bad superblock on /dev/sdc1
2016-01-30 mount失败问题解决 [root@mofficedb2 ~]# mount /dev/sdc /dta mount: you must specify the filesyst ...
- Vectorized implementation
Vectorization Vectorization refers to a powerful way to speed up your algorithms. Numerical computin ...
- Kinect 开发 —— 骨骼追踪
骨骼追踪技术通过处理景深数据来建立人体各个关节的坐标,骨骼追踪能够确定人体的各个部分,如那部分是手,头部,以及身体.骨骼追踪产生X,Y,Z数据来确定这些骨骼点.骨骼追踪系统采用的景深图像处理技术使用更 ...
- Windows学习总结(4)——Host文件的作用和如何修改Host文件
本经验将为您介绍,什么是Host文件,Host文件作用,Host文件的位置等信息,以帮忙您了解Host文件. 方法/步骤 什么是HOST文件: Hosts是一个没有扩展名的系统文件,其基本作用就是将一 ...
- 关于Blocking IO,non-Blokcing IO,async IO的区别和理解
来源:http://shmilyaw-hotmail-com.iteye.com/blog/1896683 概括来说,一个IO操作可以分为两个部分:发出请求.结果完成.如果从发出请求到结果返回,一直B ...