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、命名规则 见名知意。起一个有意义的名字&#…

【IT笔试面试题整理】不用加减乘除做加法

【试题描述】写一个函数&#xff0c;求两个整数的和&#xff0c;要求在函数体内不得使用加减乘除四则运算符合。 基本思路是这样的&#xff1a; int A, B;A&B //看哪几位有进位A^B //不带进位加 考虑二进制加法的过程&#xff0c; 步骤一、A^B&#xff0c;能够得到没有…

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) 在程序中…

C++ _countf

Windows宏&#xff0c;用来计算一个静态分配的数组中的元素的个数&#xff0c;而sizeof是用来计算字节数。 _countof(array); 参数 array数组的名字 返回值 array数组中的元素个数 备注 确保array是一个静态分配的数组&#xff0c;而不是一个指针。如果array是一个指针&#xf…

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

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

linux历史性能数据,Linux平台下如何看OS历史的性能数据

同事电话询问Linux下一个集群内2个主机前后2天相继无响应&#xff0c;表现状况为ping都没响应。因为没任何监控或其他性能数据&#xff0c;故需要获取历史OS性能数据。我们知道rhel5,6下默认可以通过sar命令查看OS历史信息&#xff0c;故执行sar即可看到当天的数据。[rootora11…

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

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

C语言 二维数组做函数参数的几种情况

&#xff08;1&#xff09; 实参为数组元素地址&#xff0c;虚参为元素类型指针 &#xff08;a&#xff09; 调用函数&#xff1a;fun(*a,3*4); //*a也可为a[0] or &a[0][0] 函数&#xff1a; fun(int *p,int n) //*p也可为p[]{ p[i] or *(pi) } &#xff…

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;

putty连接linux上传python,通过PuTTY用于SSH的Python脚本

我可以在命令行中给出以下命令C:\>cd "C:\Program Files\ExtraPuTTY\Bin"C:\Program Files\ExtraPuTTY\Bin>putty.exe -ssh root172.20.0.102 22这可以帮助我通过PuTTY打开SSH会话.而我无法在Python脚本中复制它们.cwd"C://Program Files//ExtraPuTTY//Bi…

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 是该表的主键…

linux基础 linhaifeng,Linux 基础命令(一)

Linux 基础&#xff1a;Linux 比 Windows 更稳定做服务器&#xff0c;开发出来的软件需要在服务器上运行# 测试硬盘速度dd if/dev/zero ofsdb5/test bs10G count1# 写一个 10G 的文件写文件 input fileout file block size1. 操作系统内核与系统调用1.1 操作系统操作系统是用来…

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; 答…

oracle 从别的数据库获取数据 ,访问其他数据库

在某个oracle数据库&#xff0c;获取其他oracle数据库中的数据&#xff0c;需要建立database link&#xff0c;在使用语句获取数据 假设前置机实例名prod,你要查询的用户scott密码tiger在本机:create database link xxx connect to scott identified by tiger usingprod;成功连…