1^b+2^b+3^b+...+n^b数列
首先,这是我自己推出来的,O(n^2),常数巨大。所以无能为力优化!所以求此数列的公式!求优化!!!
主要思想:要算b次的,那么就要先算b+1次的。
首先,我用F(i, j)表示杨辉三角第i层第j个,即(a+b)^(i-1),i>1的展开各项系数
第1层:1
第2层:1 1 ((a+b)^1)
第3层:1 2 1 ((a+b)^2)
第4层:1 3 3 1 ((a+b)^3)
....
upd:原来自己2写的都是什么东西,后期想改成latex也不改了,就这样了。现在我来推:
用高一次的推低次的:
$$要求:\sum_{i=1}^{n} i^b$$
$$那么根据:\sum_{i=1}^{n} i^{b+1} + (n+1)^{b+1} = \sum_{i=1}^{n+1} i^{b+1} = \sum_{i=0}^{n} (i+1)^{b+1}$$
然后展开右式后发现能高此项的能约掉,所以就能得到低次项的。
那么,(n+1)^b展开就是
$$F(b+1,1) \times n^b + F(b+1,2) \times n^(b-1) + ... + F(b+1,b) \times n^1 + F(b+1,b+1) \times n^0$$
那么
$$(1+1)^b + (2+1)^b + (3+1)^b + ... + (n+1)^b =$$
$$(F(b+1,1) \times 1^b + F(b+1,1) \times 2^b + F(b+1,1) \times 3^b + ... + F(b+1,1) \times n^b) +$$
$$(F(b+1,2) \times 1^(b-1) + F(b+1,2) \times 2^(b-1) + F(b+1,2) \times 3^(b-1) + ... + F(b+1,2) \times n^(b-1) ) +$$
...
$$(F(b+1,b) \times 1^1 + F(b+1,b) \times 2^1 + F(b+1,b) \times 3^1 + ... + F(b+1,b) \times n^1) +$$
$$(F(b+1,b+1) \times 1^0 + F(b+1,b+1) \times 2^0 + F(b+1,b+1) \times 3^0 + ... + F(b+1,b+1) \times n^0) = $$
$$F(b+1,1) \times (1^b+2^b+...+n^b) + F(b+1,2) \times (1^(b-1)+2^(b-1)+...+n^(b-1)) + ... + F(b+1,b) \times (1^1+2^1+...+n^1) + F(b+1,b+1) \times (1^0+2^0+...+n^0) $$
因为F(b+1,1)=F(b+1,b+1)=1
所以 化简得到
$$(1+1)^b + (2+1)^b + (3+1)^b + ... + (n+1)^b =
(1^b+2^b+...+n^b) + F(b+1,2) \times (1^(b-1)+2^(b-1)+...+n^(b-1)) + ... + F(b+1,b) \times (1^1+2^1+...+n^1) + n$$
好了,我们发现了1^(b-1)+2^(b-1)+...+n^(b-1)出现了,那么就可以算了。将(1^b+2^b+...+n^b) 移左式,得
(n+1)^b - 1 - n = F(b+1,2) \times (1^(b-1)+2^(b-1)+...+n^(b-1)) + ... + F(b+1,b) \times (1^1+2^1+...+n^1)
好了,继续化简,得
1^(b-1)+2^(b-1)+...+n^(b-1) = ((n+1)^b - (n+1) - F(b+1,3) \times (1^(b-2)+2^(b-2)+...+n^(b-2)) - ... - F(b+1,b) \times (1+2+...+n)) / F(b+1,2)
因为F(b+1,2) = b,所以,最终得
1^(b-1)+2^(b-1)+...+n^(b-1) = ((n+1)^b - (n+1) - F(b+1,3) \times (1^(b-2)+2^(b-2)+...+n^(b-2)) - ... - F(b+1,b) \times (1+2+...+n)) / b
我们令 x = b-1,那么b = x+1,得
1^x+2^x+...+n^x = ((n+1)^(x+1) - (n+1) - F(x+2,3) \times (1^(x-1)+2^(x-1)+...+n^(x-1)) - ... - F(x+2,x+1) \times (1+2+...+n)) / (x+1)
好了,我们现在用S(x)表示1^x+2^x+...+n^x
得到公式:
S(1) = 1^1+2^1+...+n^1 = n(n+1) / 2
S(x) = ((n+1)^(x+1) - (n+1) - F(x+2,3) \times S(x-1) - F(x+2,4) \times S(x-2) - ... - F(x+2,x+1) \times S(1)) / (x+1)
(不证明了,自己用归纳证一下)
(另,求优化!有没有O(1)算法,那个(n+1)^(x+1)会耗很多时间= =)
好了。我们将x=2带进去得到1^2+2^2+...+n^2
得到
S(2) = ((n+1)^3- (n+1) - F(4,3) \times S(1)) / 3 = ((n+1)^3- (n+1) - 3 \times (n(n+1) / 2)) / 3 = (n^3 + 3 \times n^2 + 2 \times n - 3 \times n(n+1)/2) / 3 = n \times (2 \times n^2+3n+1) / 6 =n \times (n+1) \times (2 \times n+1) / 6
所以
S(2) = n \times (n+1) \times (2 \times n+1) / 6
即 1^2+2^2+...+n^2 = n \times (n+1) \times (2 \times n+1) / 6
(求大神们指点)
1^b+2^b+3^b+...+n^b数列的更多相关文章
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- NYOJ 1007
在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...
- 【探索】无形验证码 —— PoW 算力验证
先来思考一个问题:如何写一个能消耗对方时间的程序? 消耗时间还不简单,休眠一下就可以了: Sleep(1000) 这确实消耗了时间,但并没有消耗 CPU.如果对方开了变速齿轮,这瞬间就能完成. 不过要 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- C语言 · 查找整数 · 基础练习
问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个. 输入格式 第一行包含一个整数n. 第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000. 第三行包含一个 ...
- JavaScript实现常用的排序算法
▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...
- 【Web动画】SVG 线条动画入门
通常我们说的 Web 动画,包含了三大类. CSS3 动画 javascript 动画(canvas) html 动画(SVG) 个人认为 3 种动画各有优劣,实际应用中根据掌握情况作出取舍,本文讨论 ...
- Node.js:进程、子进程与cluster多核处理模块
1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...
- [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html 目录 马桶排序(令人 ...
- 算法与数据结构(十七) 基数排序(Swift 3.0版)
前面几篇博客我们已经陆陆续续的为大家介绍了7种排序方式,今天博客的主题依然与排序算法相关.今天这篇博客就来聊聊基数排序,基数排序算法是不稳定的排序算法,在排序数字较小的情况下,基数排序算法的效率还是比 ...
随机推荐
- HDU 1978 记忆化搜索(dfs+dp)
Y - How many ways Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- Ubuntu系统如何查看硬件配置信息
查看ubuntu硬件信息 1, 主板信息 .查看主板的序列号 -------------------------------------------------- #使用命令 dmidecode | ...
- C++类编程(一)const的使用
设计类时,考虑以下五点 1.构造函数初始化列表 2.函数该不该加const 3.参数传递尽量考虑用引用传递,考虑加不加const 4.返回用不用引用 5.数据尽量放在private,函数尽量放在pub ...
- Hadoop入门程序WordCount的执行过程
首先编写WordCount.java源文件,分别通过map和reduce方法统计文本中每个单词出现的次数,然后按照字母的顺序排列输出, Map过程首先是多个map并行提取多个句子里面的单词然后分别列出 ...
- 连续自然数和(codevs 1312)
题目描述 Description 对于一个自然数M,求出所有的连续的自然数段,使得这些连续自然数段的全部数字和为M.eg:1998+1999+2000+2001+2002=10000,所以从1998到 ...
- 标准化css属性顺序
前言 对于css文件而言,选择器的写法有它的讲究,如—— 1> 不要用ID选择器 2> 不要用通配符*选择器 3> 选择器的层级 ...... 对于属性值的写法也有他的讲究,如—— ...
- ping 有端口的ip
使用工具 tcping 使用方法,将此工具放在C:/Windows/System32 目录下, 在cmd 中: tcping 127.0.0.1 8080
- mysql_4(解决中文乱码问题)
mysql> create database if not exists xdb default character set utf8;Query OK, 1 row affected (0.0 ...
- jar包和war包的区别
jar包和war包的区别: jar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性了,这些jar包一般都会放在lib目录 ...
- 深入学习SQL的Limit语句
一.基本语法 SQL的limit语法的如以下形式 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 当省略offset的时候 ...