链接

点击跳转

题解

先乘以16n−116^{n-1}16n−1

现在就是要计算小数后面第一位

假设16n−k=t(8k+1)+r16^{n-k} = t(8k+1) + r16n−k=t(8k+1)+r,其中ttt是整数,rrr是不超过(8k+1)(8k+1)(8k+1)的余数

则其对小数的贡献是r/(8k+1)r/(8k+1)r/(8k+1)

然后会发现算出来是负数

没关系,我只要不停的加一,直到它大于000为止就停下

代码

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define iinf 0x3f3f3f3f
#define linf (1ll<<60)
#define eps 1e-8
#define maxn 1000010
#define maxe 1000010
#define cl(x) memset(x,0,sizeof(x))
#define rep(i,a,b) for(i=a;i<=b;i++)
#define drep(i,a,b) for(i=a;i>=b;i--)
#define em(x) emplace(x)
#define emb(x) emplace_back(x)
#define emf(x) emplace_front(x)
#define fi first
#define se second
#define de(x) cerr<<#x<<" = "<<x<<endl
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
ll read(ll x=0)
{ll c, f(1);for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;for(;isdigit(c);c=getchar())x=x*10+c-0x30;return f*x;
}
struct EasyMath
{ll prime[maxn], phi[maxn], mu[maxn];bool mark[maxn];ll fastpow(ll a, ll b, ll c){ll t(a%c), ans(1ll);for(;b;b>>=1,t=t*t%c)if(b&1)ans=ans*t%c;return ans;}void exgcd(ll a, ll b, ll &x, ll &y){if(!b){x=1,y=0;return;}ll xx, yy;exgcd(b,a%b,xx,yy);x=yy, y=xx-a/b*yy;}ll inv(ll x, ll p)  //p是素数{return fastpow(x%p,p-2,p);}ll inv2(ll a, ll p){ll x, y;exgcd(a,p,x,y);return (x+p)%p;}void shai(ll N){ll i, j;for(i=2;i<=N;i++)mark[i]=false;*prime=0;phi[1]=mu[1]=1;for(i=2;i<=N;i++){if(!mark[i])prime[++*prime]=i, mu[i]=-1, phi[i]=i-1;for(j=1;j<=*prime and i*prime[j]<=N;j++){mark[i*prime[j]]=true;if(i%prime[j]==0){phi[i*prime[j]]=phi[i]*prime[j];break;}mu[i*prime[j]]=-mu[i];phi[i*prime[j]]=phi[i]*(prime[j]-1);}}}ll CRT(vector<ll> a, vector<ll> m) //要求模数两两互质{ll M=1, ans=0, n=a.size(), i;for(i=0;i<n;i++)M*=m[i];for(i=0;i<n;i++)(ans+=a[i]*(M/m[i])%M*inv2(M/m[i],m[i]))%=M;return ans;}
}em;
ll T, n;
int main()
{double ans=0;ll i, k, kase;T=read();rep(kase,1,T){ll n=read();ans=0;rep(k,0,n-1){ans += double( 4*em.fastpow(16,n-1-k,8*k+1)%(8*k+1) ) / (8*k+1);ans -= double( 2*em.fastpow(16,n-1-k,8*k+4)%(8*k+4) ) / (8*k+4);ans -= double( 1*em.fastpow(16,n-1-k,8*k+5)%(8*k+5) ) / (8*k+5);ans -= double( 1*em.fastpow(16,n-1-k,8*k+6)%(8*k+6) ) / (8*k+6);ans -= ll(ans);}double inv = 1.0/16;rep(k,n,n+100000){ans += inv * ( 4.0/(8*k+1) - 2.0/(8*k+4) - 1.0/(8*k+5) - 1.0/(8*k+6) );inv /= 16;}ans -= ll(ans);while(ans<0)ans++;printf("Case #%lld: %lld %X\n",kase,n,int(ans*16)%16);}return 0;
}

hdu6217 - BBP Formula相关推荐

  1. HDU6217 BBP Formula

    简略题意:问π的十六进制表示的小数点后第n位是多少. 关于BBP公式详见WIKI百科 这个公式的作用就是计算十六进制下的小数点后第n位,而不必计算前n-1项. π=∑∞k=0[116k(48k+1)− ...

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

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

  3. BBP Formula HDU6217

    大致题意是计算Π的小数点后第n位的值. 这道题最主要的地方是bbp公式 圆周率每乘以一个16,就相当于把十六进制的圆周率小数点向右移动一位,移动b位就是乘以16^b,而BBP公式给出的级数,可以分解成 ...

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

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

  5. hdu 6217 BBP Formula

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

  6. HDU 6217 BBP Formula (数学)

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

  7. 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%A ...

  8. 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...

  9. bbp公式求圆周率、python_【并行计算】六种方法计算圆周率

    计算π的历史 圆周率π可能是科学界内外最广为人知的自然常数了.早在公元5世纪时,南朝宋数学家祖冲之用割圆法将圆周率计算到小数点后7位数字.大约同一时间,印度的数学家也将圆周率计算到了小数点后5位.历史 ...

最新文章

  1. Apache架构师的30条设计原则!
  2. 遗传算法 Genetic Algorithm
  3. ABP入门系列(7)——分页实现
  4. 【转】android手势处理揭秘
  5. java定义时间格式大全_Java时间格式转换大全
  6. 【转】ubuntu 下安装mongodb php 拓展的方法
  7. 2021-07-3022
  8. python网页登录验证码不显示_进网页需要验证码?不好意思,Python从来不惧各种验证码!...
  9. 我的世界java版和基岩版对比_基岩版Beta1.11.0.1发布
  10. 【Docker】Docker 安装 Prometheus并且交给 grafana
  11. java web 的map_javaweb开发过程中小工具系列之将Map转换成对象
  12. python 下载及安装-CentOS下python的下载及安装
  13. 真正智能的语音识别系统离我们还有多远
  14. Winsock编程入门 -- 4.面向连接的通讯
  15. Vue2.0七——生命周期
  16. 安国U盘量产无法识别芯片处理
  17. 神经网络的数学原理(二):神经元与神经网络
  18. t6服务器的系统数据库不存在,用友T6软件出纳管理系统数据库质疑用任何方法无法恢复时解决方法-用友T6...
  19. jsLint 检查分析
  20. java程序员出路在哪里,使用/教程/实例

热门文章

  1. Python操作邮箱发送邮件(网易邮箱)
  2. Roguelike诞生记
  3. 老笔记整理二:网页小问题汇总
  4. 两小时学会MySQL查询语句(上篇)
  5. 20条技巧,让Chrome超越Firefox (2010-11-16更新)
  6. 天九共享携手猫屎咖啡打造商业高速服务区
  7. kafka如何扩容分区Partition、并重新分区
  8. 英雄联盟手游登录注册地与服务器不匹配,《lol手游》登录失败解决教程 全错误代码异常解决方法...
  9. 红队培训班作业 | 免杀过360和火绒 四种方法大对比
  10. 关于虚拟机上fedora14不能上网的问题解决