题目链接:http://poj.org/problem?id=1707

  利用bernoulli方程来解决此题。

数学上,伯努利数Bn的第一次发现是与下述数列和的公式有关:

其中n为固定的任意正整数。

这数列和的公式必定是变量为m,次数为n+1的多项式,称为伯努利多项式。伯努利多项式的系数与伯努利数有密切关系如下:

举例说,把n取为1,我们有

伯努利数可以由下列递推公式计算:

,初值条件为B0 = 1。     [摘自wikipedia]

注意:这里计算的是0~m-1的值,因此最后第二项还要加上一个m^n;

 1 //STATUS:C++_AC_0MS_140KB
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 #include<math.h>
 6 #include<iostream>
 7 #include<string>
 8 #include<algorithm>
 9 #include<vector>
10 #include<queue>
11 #include<stack>
12 #include<map>
13 using namespace std;
14 #define LL __int64
15 #define pii pair<int,int>
16 #define Max(a,b) ((a)>(b)?(a):(b))
17 #define Min(a,b) ((a)<(b)?(a):(b))
18 #define mem(a,b) memset(a,b,sizeof(a))
19 #define lson l,mid,rt<<1
20 #define rson mid+1,r,rt<<1|1
21 const int N=25,INF=0x3f3f3f3f,MOD=40001,STA=8000010;
22 const double DNF=1e13;
23
24 LL B[N][2],C[N][N],f[N][2];
25 int n,m;
26
27
28 LL gcd(LL a,LL b){return b?gcd(b,a%b):a;}
29 LL lcm(LL a,LL b){return a/gcd(a,b)*b;}
30
31 void getC(int n)
32 {
33     int i,j;
34     n++;
35     for(i=0;i<=n;i++)C[i][0]=C[i][i]=1;
36     for(i=2;i<=n;i++){
37         for(j=1;j<n;j++){
38             C[i][j]=C[i-1][j-1]+C[i-1][j];
39         }
40     }
41 }
42
43 void bernoulli(int n)
44 {
45     int i,m;
46     LL s[2],b[2],l,g;
47     B[0][0]=1;B[0][1]=1;
48     for(m=1;m<=n;m++){
49         s[0]=1,s[1]=1;
50         for(i=1;i<m;i++){
51             b[0]=C[m+1][i]*B[i][0];
52             b[1]=B[i][1];
53             l=lcm(s[1],b[1]);
54             s[0]=l/s[1]*s[0]+l/b[1]*b[0];
55             s[1]=l;
56         }
57         s[0]=-s[0];
58         if(s[0]){
59             g=gcd(s[0],s[1]*C[m+1][m]);
60             B[m][0]=s[0]/g;
61             B[m][1]=s[1]*C[m+1][m]/g;
62         }
63         else B[m][0]=0,B[m][1]=1;
64     }
65 }
66
67 int main()
68 {
69  //   freopen("in.txt","r",stdin);
70     int i,j;
71     LL g,maxlcm;
72     getC(20);
73     bernoulli(20);
74     while(~scanf("%d",&m))
75     {
76         for(i=0;i<=m;i++){
77             g=gcd(C[m+1][i],B[i][1]);
78             f[i][0]=C[m+1][i]/g*B[i][0];
79             f[i][1]=B[i][1]/g;
80         }
81         maxlcm=f[0][1];
82         for(i=1;i<=m;i++){
83             maxlcm=lcm(maxlcm,f[i][1]);
84         }
85         if(maxlcm<0)maxlcm=-maxlcm;
86         for(i=0;i<=m;i++){
87             f[i][0]*=maxlcm/f[i][1];
88         }
89         f[1][0]+=maxlcm*(m+1);
90
91         printf("%I64d",(m+1)*maxlcm);
92         for(i=0;i<=m;i++)
93             printf(" %I64d",f[i][0]);
94         printf(" 0\n");
95     }
96     return 0;
97 }

转载于:https://www.cnblogs.com/zhsl/archive/2013/04/08/3009161.html

POJ-1707 Sum of powers bernoulli方程相关推荐

  1. poj 1564 Sum It Up | zoj 1711 | hdu 1548 (dfs + 剪枝 or 判重)

    Sum It Up Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Sub ...

  2. poj 2739 Sum of Consecutive Prime Numbers

    悲剧,如此水题,竟搞了许久.唉,只因题目没看清. 准确的说:应该是准备工作没做好就开始敲代码了!! 下次一定要想的很清楚了再code ing ! //144K 63MS #include <st ...

  3. POJ 1320 Street Numbers 解佩尔方程

    传送门 Street Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2529   Accepted: 140 ...

  4. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  5. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  6. POJ 动态规划题目列表

    1.这份列表当然不是我原创的,从文库里下载了一份,放到这里便于自己浏览和查找题目. ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号: 容易:  1018, 1050 ...

  7. poj动态规划经典题目

    列表一:经典题目题号: 容易: 1018, 1050, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1 ...

  8. 【转】别人整理的DP大全

    为什么80%的码农都做不了架构师?>>>    动态规划 动态规划 容易: 1018 , 1050 , 1083 , 1088 , 1125 , 1143 , 1157 , 1163 ...

  9. 一阶常微分方程(二)|全微分方程+线性方程+常数易变法+伯努力方程

    1.全微分方程 若存在函数u(x,y)u(x,y)u(x,y)使得 du(x,y)=f(x,y)dx+g(x,y)dydu(x,y)=f(x,y)dx+g(x,y)dy du(x,y)=f(x,y)d ...

最新文章

  1. spring注解--@Bean
  2. 学习笔记Hadoop(十一)—— Hadoop基础操作(3)—— MapReduce常用Shell操作、MapReduce任务管理
  3. shell模拟php多进程从redis获取数据(一个库多个key值)
  4. 1038. Recover the Smallest Number (30)
  5. 奥格斯堡大学计算机系,奥格斯堡大学七大科系设置简介
  6. swagger的使用方式
  7. .net企业级架构实战之1——框架综述
  8. android studio 中怎么写aspectj代码,AndroidStudio中 AspectJ 基础使用 简介
  9. 悲观锁、乐观锁、单版本并发控制、多版本并发控制 关系
  10. paip.提升用户体验---防止windows假死之CPU 100%解决
  11. bootdo框架中使用shiro控制的权限(bootstrap)
  12. 35岁开发转测试,能度过中年危机吗?
  13. 云信IM服务端API调用(THINKPHP版)
  14. 91手机助手电脑版官方版
  15. php发送消息给telegram,PHP对接telegram
  16. java设计模式(13-19节)
  17. AdGuard 无与伦比的广告拦截
  18. 高一末计算机考试试题,高一计算机第一学期期末试题
  19. te40终端不设网关_华为TE40视频会议维修,华为视频会议终端维修
  20. 关于安装双系统时多重引导的说明

热门文章

  1. CMake 常用的预定义变量
  2. Redis原理及拓展
  3. Vue之组件之间的数据传递
  4. 看日本如何用IoT打造智能工厂
  5. 只用2000行代码实现google protocol buffer c++版的功能
  6. 使用RMAN备份数据库
  7. 重写laravel的request的校验器
  8. implements Serializable
  9. 短作业优先算法的缺点
  10. 机器学习接口代码之 Ridge、Lasso、Elasitc Net