http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1258

基准时间限制:8 秒 空间限制:131072 KB 分值: 1280 难度:9级算法题
 收藏
 关注
T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n)。给出n和k,求S(n)。

 
例如k = 2,n = 5,S(n) = 1^2 + 2^2 + 3^2 + 4^2 + 5^2 = 55。
由于结果很大,输出S(n) Mod 1000000007的结果即可。
Input
  1. 1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 500)
  2. 2 - T + 1行:每行2个数,N, K中间用空格分割。(1 <= N <= 10^18, 1 <= K <= 50000)
Output
  1. T行,对应S(n) Mod 1000000007的结果。
Input示例
  1. 3
  2. 5 3
  3. 4 2
  4. 4 1
Output示例
  1. 225
  2. 30
  3. 10

拉格朗日插值法

注意观察 插值表达式分子分母的性质,递推得每一项的值

  1. #include<cstdio>
  2. #include<iostream>
  3.  
  4. using namespace std;
  5.  
  6. const int mod=1e9+;
  7.  
  8. typedef long long LL;
  9.  
  10. int sum[];
  11. int jc[],inv[];
  12. int l[],r[];
  13.  
  14. template<typename T>
  15. void read(T &x)
  16. {
  17. x=; char c=getchar();
  18. while(!isdigit(c)) c=getchar();
  19. while(isdigit(c)) { x=x*+c-''; c=getchar(); }
  20. }
  21.  
  22. int Pow(int a,int b)
  23. {
  24. int res=;
  25. for(;b;a=1LL*a*a%mod,b>>=)
  26. if(b&) res=1LL*res*a%mod;
  27. return res;
  28. }
  29.  
  30. int solve(LL n,int k)
  31. {
  32. if(n<=k+) return sum[n];
  33. n%=mod;
  34. int w=Pow(jc[k+],mod-);
  35. l[]=;
  36. for(int i=;i<=k+;++i) l[i]=1LL*l[i-]*(n-i)%mod;
  37. r[k+]=;
  38. for(int i=k+;i;--i) r[i]=1LL*r[i+]*(n-i)%mod;
  39. int ans=;
  40. for(int i=;i<=k+;++i)
  41. {
  42. ans=(ans+1LL*sum[i]*w%mod*l[i-]%mod*r[i+]%mod)%mod;
  43. w=1LL*w*(i-k-)%mod*inv[i]%mod;
  44. }
  45. if(ans<) ans+=mod;
  46. return ans;
  47. }
  48.  
  49. int main()
  50. {
  51. int T;
  52. read(T);
  53. LL n; int k;
  54. inv[]=;
  55. for(int i=;i<=;++i) inv[i]=1LL*(mod-mod/i)*inv[mod%i]%mod;
  56. jc[]=;
  57. for(int i=;i<=;++i) jc[i]=1LL*jc[i-]*(-i)%mod;
  58. while(T--)
  59. {
  60. read(n); read(k);
  61. for(int i=;i<=k+;++i) sum[i]=(sum[i-]+Pow(i,k))%mod;
  62. printf("%d\n",solve(n,k));
  63. }
  64. return ;
  65. }

51nod 1258 序列求和 V4的更多相关文章

  1. 51NOD 1258 序列求和 V4 [任意模数fft 多项式求逆元 伯努利数]

    1258 序列求和 V4 题意:求\(S_m(n) = \sum_{i=1}^n i^m \mod 10^9+7\),多组数据,\(T \le 500, n \le 10^{18}, k \le 50 ...

  2. 【51Nod1258】序列求和V4(FFT)

    [51Nod1258]序列求和V4(FFT) 题面 51Nod 多组数据,求: \[Ans=\sum_{i=1}^ni^k,n\le 10^{18},k\le50000\] 题解 预处理伯努利数,时间 ...

  3. 51nod 1228 序列求和(伯努利数)

    1228 序列求和  题目来源: HackerRank 基准时间限制:3 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  关注 T(n) = n^k,S(n) = T(1 ...

  4. 51nod 1228、1258 序列求和

    这里一次讲两题...貌似都是板子? 所以两题其实可以一起做 [雾 noteskey 总之就是伯努利数的两道入门题啦,就是第二道有点鬼畜了,居然要任意模数的!(好吧是 1e9+7 但也没什么区别了) 伯 ...

  5. [51nod 1822]序列求和

    \(k\leq 200000\) 考虑转化成枚举 \(k\) 的形式 我们错位相减! \[A_k=\sum_{i=1}^N i^K\times R^i \\ RA_k=\sum_{i=2}^{N+1} ...

  6. 51nod 1228 序列求和 ( 1^k+2^k+3^k+...+n^k )

    C为组合数,B为伯努利数 具体推到过程略 参考博客:http://blog.csdn.net/acdreamers/article/details/38929067# (我的式子和博客中的不一样,不过 ...

  7. 51nod1258 序列求和V4

    T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n).给出n和k,求S(n).   例如k = 2,n = 5,S(n) = 1^2 + 2^2 + 3^2 + 4^ ...

  8. 51Nod - 1228 序列求和 (自然数幂和+伯努利数)

    https://vjudge.net/problem/51Nod-1228 Description T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n).给出n和k, ...

  9. 51Nod 1228 序列求和

    T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n).给出n和k,求S(n).   例如k = 2,n = 5,S(n) = 1^2 + 2^2 + 3^2 + 4^ ...

随机推荐

  1. Unity利用SMSSDK实现短信验证码(附代码)

    最近一直在研究如何给app更多实用性的功能,在app进行登录或者注册时,为了方便用户更加快捷的完成登录功能,所以就决定采用短信验证码的方式进行验证登录.在学习的过程中,先使用了Mob的短信服务进行短信 ...

  2. Teaching Machines to Understand Us 让机器理解我们 之二 深度学习的历史

    Deep history 深度学习的历史 The roots of deep learning reach back further than LeCun’s time at Bell Labs. H ...

  3. 二叉树 c++

    树 非空树 有一个(root)根节点r 其余节点可分为m个互不相交的有限集(子树)T1....Tm 具有n个节点的树,具有(n-1)条连接(指针域),需要构成结构体,尽可能减少空间域的浪费,使用儿子兄 ...

  4. 微软职位内部推荐-Software Development Engineer II_Commerce

    微软近期Open的职位: Are you looking for a high impact project that involves processing of billions of dolla ...

  5. 2-Sixteenth Scrum Meeting-20151216

    任务安排 成员 今日完成 明日任务 闫昊 写完学习进度记录的数据库操作  写完学习进度记录的数据库操作 唐彬 编写与服务器交互的代码  编写与服务器交互的代码 史烨轩 获取视频url   余帆  本地 ...

  6. Daily Scrumming* 2015.12.15(Day 7)

    一.团队scrum meeting照片 二.成员工作总结 姓名 任务ID 迁入记录 江昊 任务1036 https://github.com/buaaclubs-team/temp-front/com ...

  7. alpha版发布

    网站网址:http://doeverying.applinzi.com/

  8. Sprint 1 Review & Daily Scrum - 11/18

    今天我们组利用课后的时间对Sprint 1阶段进行了回顾,并对接下来的工作进行了安排. Sprint 1阶段我们开始定的计划是完成最基础的背单词功能,可以让用户可以完整地走一遍背单词流程.回顾上周,我 ...

  9. CMake系列之一:概念

    不同的make工具遵循不同的规范和标准,因此针对不同的标准需要不同的Makefile文件.CMake利用一种平台无关的CMakeList.txt文件定制编译流程,根据目标用户的平台生成本地化的Make ...

  10. ThinkPHP从零开始(一)安装和配置

    序: 对PHP一无所知的我,将从这里从零开始. 1.下载与安装 ThinkPHP的下载: ThinkPHP中文站下载页面 有 核心版和完整版两种,由于不了解.所以我选择了完整版.    WampSer ...