题意

已知公式:$\pi=\sum_{k=0}^{\infty}\left[\frac{1}{16^{k}}\left(\frac{4}{8 k+1}-\frac{2}{8 k+4}-\frac{1}{8 k+5}-\frac{1}{8 k+6}\right)\right]$

求 $\pi$ 的第 $n$ 项。

分析

WIKI上有:π的BBP位抽取算法

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

将公式乘以 $16^n$ 就能将小数点移动到第 $n$ 位。

我们只需要将小数点移动到第 $n-1$ 位,减去整数部分,将小数部分乘 16 就是16进制下的第 $n$ 位。

#include<bits/stdc++.h>
using namespace std; typedef long long ll;
int n;
ll qpow(ll a, ll b, ll mod)
{
ll ret = ;
while(b)
{
if(b&) ret = ret * a % mod;
a = a * a % mod;
b >>= ;
}
return ret;
} double BBP(int c1, int c2, int n)
{
double ret = 0.0;
for(int i = ;i <= n;i++) ret += qpow(, n-i, *i+c2)*1.0/(*i+c2);
return c1*ret;
} int main()
{
int T, kase = ;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
double res = BBP(, , n-) - BBP(, , n-) - BBP(, , n-) - BBP(, , n-);
res = res - (int)res;
if(res < ) res = res + ;
printf("Case #%d: %d ", ++kase, n);
int ans = (int)(res*);
if(ans < ) printf("%d\n", ans);
else printf("%c\n", 'A'+ans-);
}
return ;
}

参考链接:https://www.cnblogs.com/LzyRapx/p/7802790.html

最新文章

  1. 【转】MyEclipse快捷键大全
  2. 【CSU1808】地铁
  3. 【Win 10应用开发】如何知道当前APP在哪个平台设备上运行
  4. html-php深入理解
  5. STL--自定义类型的排序
  6. csms发布步骤
  7. php生成短网址的思路与方法
  8. 模拟Post
  9. IOS学习[Swift中跳转与传值]
  10. C++编译程序时的内存分配
  11. 使用Excel自动生成sql语句
  12. vue.js 组件引用之初级 之二
  13. HCNP - Server
  14. bootstrap.memory_lock: true导致Elasticsearch启动失败问题
  15. pxe-kickstart
  16. 第13章 Spring框架的设计理念与设计模式分析
  17. Mysql8.0 3306端口无法远程连接
  18. Android内存优化大全(中)
  19. [cqoi2012]交换棋子
  20. inline-block的使用

热门文章

  1. docker for windows添加卷映射
  2. OSG :三维无序离散点构建Delaunay三角网
  3. k8s-jenkins x CI/CD 动态创建slave---01
  4. vuejs怎么和thinkphp结合
  5. EasyNetQ笔记
  6. Java中List集合去除重复数据的六种方法
  7. python 做词云图
  8. 【02】Kubernets:使用 kubeadm 部署 K8S 集群
  9. Java 函数式编程--流操作
  10. python 练习题:小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点