题目链接: 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 (数学)的更多相关文章

  1. 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} ...

  2. HDU 4342History repeat itself 数学

    C - History repeat itself Time Limit:1000MS     Memory Limit:32768KB      Description Tom took the D ...

  3. HDU 4816 Bathysphere(数学)(2013 Asia Regional Changchun)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4816 Problem Description The Bathysphere is a spheric ...

  4. HDU 5584 LCM Walk 数学

    LCM Walk Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5584 ...

  5. HDU 4336 Card Collector 数学期望(容斥原理)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意简单,直接用容斥原理即可 AC代码: #include <iostream> ...

  6. HDU 5570 balls 期望 数学

    balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5570 De ...

  7. hdu 4710 Balls Rearrangement (数学思维)

    意甲冠军:那是,  从数0-n小球进入相应的i%a箱号.然后买一个新的盒子. 今天的总合伙人b一个盒子,Bob试图把球i%b箱号. 求复位的最小成本. 每次移动的花费为y - x ,即移动前后盒子编号 ...

  8. HDU 4790 Just Random 数学

    链接:pid=4790">http://acm.hdu.edu.cn/showproblem.php?pid=4790 意:从[a.b]中随机找出一个数字x,从[c.d]中随机找出一个 ...

  9. HDU 1018-Big Number(数学)

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

随机推荐

  1. 【Henu ACM Round#17 A】Simple Game

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 肯定是放在m-1或者m+1的. (m-1是左边的点都离a最近,而m+1则是右边的点都离他最近. 看看哪个更好就行 [代码] #inc ...

  2. 马上运行函数-$(function(){})篇

    QQ:1187362408 欢迎技术交流和学习 马上运行函数-$(function(){})篇(jquery): TODO: 1.jquery:jQuery(function($){ }) 与 $(d ...

  3. ajax ---- json 和 xml 区别

    2.XML和JSON优缺点 (1).XML的优缺点<1>.XML的优点 A.格式统一,符合标准: B.容易与其他系统进行远程交互,数据共享比较方便.<2>.XML的缺点 A.X ...

  4. 谈谈iframe的优缺点

    iframe是一种框架,也是一种很常见的网页嵌入方式,零度今天给大家分析分析它的优缺点. iframe的优点: 1.iframe能够原封不动的把嵌入的网页展现出来. 2.如果有多个网页引用iframe ...

  5. POJ 2141 模拟

    思路:字符串解密 啥都告诉你了 模拟就好 //By SiriusRen #include <cstdio> #include <cstring> using namespace ...

  6. css相关用法

    1. 2. 3.offset([coordinates]) 获取匹配元素在当前视口的相对偏移. 返回的对象包含两个整型属性:top 和 left,以像素计.此方法只对可见元素有效. a.获取当前元素的 ...

  7. ZJOI2008骑士

    Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在和平环境 ...

  8. watch---周期性的方式执行给定的指令

    watch命令以周期性的方式执行给定的指令,指令输出以全屏方式显示. 选项 -n:指定指令执行的间隔时间(秒): -d:高亮显示指令输出信息不同之处: -t:不显示标题.

  9. 【Codeforces Round #427 (Div. 2) C】Star sky

    [Link]:http://codeforces.com/contest/835/problem/C [Description] 给你n个星星的坐标(xi,yi); 第i个星星在第t秒,闪烁值变为(s ...

  10. using the easy connect naming method 简单连接測试

    一直都不明确sqlnet.ora中的NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)是什么意思.今天看到一篇文档,就是登陆选用的方式.做一个測试: tnsname ...