POJ-1707 Sum of powers bernoulli方程

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

  利用bernoulli方程来解决此题。

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

\sum_{k=0}^{m-1} k^n = 0^n + 1^n + 2^n + \cdots + {(m-1)}^n

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

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

\sum_{k=0}^{m-1} k^n = {1\over{n+1}}\sum_{k=0}^n{n+1\choose{k}} B_k m^{n+1-k}

     

     举例说,把n取为1,我们有0 + 1 + 2 + ... + (m-1) = \frac{1}{2}\left(B_0 m^2+2B_1 m^1\right) = \frac{1}{2}\left(m^2-m\right).

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

\sum_{j=0}^m{m+1\choose{j}}B_j = 0,初值条件为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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1536. 排布二进制网格的最少交换次数

文章目录1. 题目2. 解题1. 题目 给你一个 n x n 的二进制网格 grid&#xff0c;每一次操作中&#xff0c;你可以选择网格的 相邻两行 进行交换。 一个符合要求的网格需要满足主对角线以上的格子全部都是 0 。 请你返回使网格满足要求的最少操作次数&#xff0c;如果无法使网…

linux软件包管理 pdf,vSphere Storage Appliance 安装和管理 PDF

vSphere Storage Appliance 安装和管理VSA 群集利用多个 ESXi 主机的计算和存储资源&#xff0c;并提供一组可由数据中心中的所有主机访问的数据存储。运行 vSphere Storage Appliance 并加入 VSA 群集的 ESXi 主机是 VSA 群集成员。通过vSphere Storage Appliance &#xff0c…

python标识符、命名规则及关键字(含笔记)

目录 1、标识符和关键字 1.1 标识符概念 1.2 标识符规则 2、命名规则 3、关键字 1、标识符和关键字 1.1 标识符概念 开发人员在程序中自定义的一些符号和名称。标示符是自己定义的,如变量名,函数名等。 1.2 标识符规则 2、命名规则 见名知意。起一个有意义的名字&#…

LeetCode 1537. 最大得分(切片取出局部最大值)

文章目录1. 题目2. 解题1. 题目 你有两个 有序 且数组内元素互不相同的数组 nums1 和 nums2 。 一条 合法路径 定义如下&#xff1a; 选择数组 nums1 或者 nums2 开始遍历&#xff08;从下标 0 处开始&#xff09;。从左到右遍历当前数组。如果你遇到了 nums1 和 nums2 中都…

华为固件解包工具linux,华为解包工具官方下载

华为官方APP固件解包工具包括&#xff1a;华为官方固件update.app专用解包工具和 system.img解包工具&#xff0c;可解包华为官方SD卡刷机包UPDATA.APP&#xff0c;可将APP固件解包成IMG镜像分区文件&#xff0c;继续解包可对刷机包进行定制。官方ROM解包教程&#xff0c;现写一…

python输出以及常用格式符介绍(含笔记)

1 输出 1.1 普通输出 # 打印提示 print(hello world) print(给我的卡---印度语&#xff0c;你好的意思) 1.2 格式化输出 age 10 print("我今年%d岁"%age) age 1 print("我今年%d岁"%age) age 1 print("我今年%d岁"%age) 在程序中…

LeetCode MySQL 1384. 按年度列出销售总额

文章目录1. 题目2. 解题1. 题目 Product 表&#xff1a; ------------------------ | Column Name | Type | ------------------------ | product_id | int | | product_name | varchar | ------------------------ product_id 是这张表的主键。 product_name 是…

python输入以及比较逻辑运算符介绍(含笔记)

1. 输入 咱们在银行ATM机器前取钱时&#xff0c;肯定需要输入密码&#xff0c;对不&#xff1f;那么怎样才能让程序知道咱们刚刚输入的是什么呢&#xff1f;&#xff1f;大家应该知道了&#xff0c;如果要完成ATM机取钱这件事情&#xff0c;需要先从键盘中输入一个数据&#xf…

LeetCode MySQL 1336. 每次访问的交易次数

文章目录1. 题目2. 解题1. 题目 表: Visits ------------------------ | Column Name | Type | ------------------------ | user_id | int | | visit_date | date | ------------------------ (user_id, visit_date) 是该表的主键 该表的每行表示 user…

python中if命令简单介绍及注意事项(含笔记)

if语句是用来进行判断的&#xff0c;其使用格式如下&#xff1a;

jQuery源码分析系列:事件模块概述

jQuery的事件模块是较复杂的&#xff0c;前面仅仅提到了对事件对象的包装。即统一了一些兼容性的问题。这篇会综述下jQuery的整个事件模块。后面会详细分析jQuery.event.add/jQuery.event.remove/jQuery.event.trigger。 虽然事件模块代码很难读&#xff0c;但其提供的API接口还…

LeetCode MySQL 1159. 市场分析 II(rank+over)

文章目录1. 题目2. 解题1. 题目 表: Users ------------------------- | Column Name | Type | ------------------------- | user_id | int | | join_date | date | | favorite_brand | varchar | ------------------------- user_id 是该表的主键…

python中elif和while简单介绍及注意事项(含笔记)

一、elif 想一想&#xff1a; if能完成当xxx时做事情&#xff1b;if-else能完成当xxx时做事情1&#xff0c;否则做事情2; 如果有这样一种情况&#xff1a;当xxx1时做事情1&#xff0c;当xxx2时做事情2&#xff0c;当xxx3时做事情3&#xff0c;那该怎么实现呢&#xff1f; 答…

LeetCode MySQL 262. 行程和用户

文章目录1. 题目2. 解题1. 题目 Trips 表中存所有出租车的行程信息。 每段行程有唯一键 Id&#xff0c;Client_Id 和 Driver_Id 是 Users 表中 Users_Id 的外键。 Status 是枚举类型&#xff0c;枚举成员为 (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’…

花了一年时间开发出来的基于DXF文件的加工路径自动生成软件

随着科技水平的进步&#xff0c;计算机辅助制造技术CAD/CAM在机械加工中起着越来越重要得作用,传统的手动编程正在被自动编程所取代&#xff0c;目前PRO/E,UG,MasterCAM等商业软件可以根据设计的图形直接生成数控加工代码。然而这些软件相对来说功能复杂&#xff0c;不易掌握&a…

LeetCode 1136. 平行课程(拓扑排序)

文章目录1. 题目2. 解题1. 题目 已知有 N 门课程&#xff0c;它们以 1 到 N 进行编号。 给你一份课程关系表 relations[i] [X, Y]&#xff0c;用以表示课程 X 和课程 Y 之间的先修关系&#xff1a;课程 X 必须在课程 Y 之前修完。 假设在一个学期里&#xff0c;你可以学习任…

【Android】Uri和Url和URN

最早在Android方面接触这两个概念&#xff0c;是学习ContentProvider的时候&#xff0c;当时花了很多时间&#xff0c;始终不能很好的理解他们的区别&#xff0c;顺带着ContentProvider的用法也无法理解&#xff0c;最近通过实现网页链接和Android-APP的无缝跳转问题&#xff0…