Codeforces 622F 「数学数论」「数学规律」
题意:
给定n和k,求
1 ≤ n ≤ 109, 0 ≤ k ≤ 106
思路:
题目中给的提示是对于给定的k我们可以求出一个最高次为k+1的关于n的通项公式。
根据拉格郎日插值法,我们可以通过k+2个离散的点来确定这个通项。所以求出前k+2项,然后就可以确定公式。
拉格郎日差值法传送门:http://www.guokr.com/post/456777/
最后得出的公式是酱紫的:(公式来自卿学姐博客)
然后问题来了,有除法如何搞定模运算...这个就用到逆元的运算了,逆元的定义就是大家都学过的离散数学里边的那个定义,求解方法有两种,一种是根据扩展欧几里得,构造ax+by=1(mod某数),如果取模的某数是一个素数的话可以根据费马小定理a^(p-1)=1(mod某数),结合快速幂求解。
注意有j!=i的条件...所以要求的逆元数是两个,好好理解下这个式子可以用阶乘优化复杂度。
传送门:http://www.cnblogs.com/james47/p/3871782.html
坑点:
注意逆元的运算应该放到等式的前边。然后注意阶乘的正负。
代码:(基本是跟卿学姐一个模子刻出来的==
#include<bits/stdc++.h>
using namespace std;
long long mod=(1e9)+;
long long p[];
long long fac[];
long long quick_pow(long long a,long long b,long long m){
long long tmp=;
while(b){
if(b&){
tmp*=a;
tmp%=m;
}
a*=a;
a%=m;
b>>=;
}
return tmp;
}
int main()
{
long long n,k;
cin>>n>>k;
for(int i=;i<=k+;i++){
p[i]=(p[i-]+quick_pow(i,k,mod))%mod;
}
fac[]=;
for(int i=;i<=;i++){
fac[i]=fac[i-]*i;
fac[i]%=mod;
}
if(n<=k+){
cout << p[n] << endl;
return ;
}
long long chang=;
for(int i=;i<=k+;i++){
chang*=n-i;
chang%=mod;
}
long long ans=;
for(int i=;i<=k+;i++){
long long a=quick_pow(n-i,mod-,mod);
long long b=quick_pow((fac[i-]*fac[k+-i])%mod,mod-,mod);
if((k+-i)%)b=-b;
ans =(ans + p[i]*chang%mod*b%mod*a)%mod;//这句一定要注意逆元运算先
}
cout << ans << endl;
}
Codeforces 622F 「数学数论」「数学规律」的更多相关文章
- 「状压DP」「暴力搜索」排列perm
「状压DP」「暴力搜索」排列 题目描述: 题目描述 给一个数字串 s 和正整数 d, 统计 sss 有多少种不同的排列能被 d 整除(可以有前导 0).例如 123434 有 90 种排列能被 2 整 ...
- 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇
http://www.4gamer.net/games/216/G021678/20140714079/ 连载第2回的本回, Arc System Works开发的格斗游戏「GUILTY G ...
- Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory
Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...
- SSH连接时出现「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解决办法
用ssh來操控github,沒想到連線時,出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」,後面還有一大串英文,這時當然要向Google大神求助 ...
- 「Windows MFC 」「Edit Control」 控件
「Windows MFC 」「Edit Control」 控件
- 「ZJOI2019」&「十二省联考 2019」题解索引
「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...
- Loj #6069. 「2017 山东一轮集训 Day4」塔
Loj #6069. 「2017 山东一轮集训 Day4」塔 题目描述 现在有一条 $ [1, l] $ 的数轴,要在上面造 $ n $ 座塔,每座塔的坐标要两两不同,且为整点. 塔有编号,且每座塔都 ...
- Loj #6073.「2017 山东一轮集训 Day5」距离
Loj #6073.「2017 山东一轮集训 Day5」距离 Description 给定一棵 \(n\) 个点的边带权的树,以及一个排列$ p\(,有\)q $个询问,给定点 \(u, v, k\) ...
- Loj 6068. 「2017 山东一轮集训 Day4」棋盘
Loj 6068. 「2017 山东一轮集训 Day4」棋盘 题目描述 给定一个 $ n \times n $ 的棋盘,棋盘上每个位置要么为空要么为障碍.定义棋盘上两个位置 $ (x, y),(u, ...
- 「2017 山东一轮集训 Day5」苹果树
「2017 山东一轮集训 Day5」苹果树 \(n\leq 40\) 折半搜索+矩阵树定理. 没有想到折半搜索. 首先我们先枚举\(k\)个好点,我们让它们一定没有用的.要满足这个条件就要使它只能和坏 ...
随机推荐
- Innodb锁机制:Next-Key Lock 浅谈(转)
http://www.cnblogs.com/zhoujinyi/p/3435982.html 数据库使用锁是为了支持更好的并发,提供数据的完整性和一致性.InnoDB是一个支持行锁的存储引擎,锁的类 ...
- MySQL中SSL配置
http://wenku.baidu.com/link?url=Tl71LnP-mqf-HExIRLWviUINgkfHMbd4hL2WGhuUHQlDwcw3QVfuTgcB6CiIMgvszY9W ...
- 用c#读取文件内容中文是乱码的解决方法:
用c#读取文件内容中文是乱码的解决方法: //方法1: StreamReader din = new StreamReader(@"C:\1.txt", System.Text.E ...
- 用Opera Mobile调试手机版网页【转】
注意:新版本的opera已经采用webkit内核,没有dragonfly了. 要下载12版的http://get.geo.opera.com/pub/opera/win/1216/int/Opera_ ...
- [转]Linux环境下查看线程数的几种方法
1.cat /proc/${pid}/status 2.pstree -p ${pid} 3.top -p ${pid} 再按H,或者直接输入 top -bH -d 3 -p ${pid} top ...
- 读书笔记:Sheldon Ross:概率论基础教程:随机变量
例1b 一个坛子里装有编号1-20的球,无放回抽取3个,取出球中至少一个号码大于等于17的概率是多少? 除了书上的解法外,还有一种解法: 考虑相反的情况:三个球的号码都小于17. 第一次从编号1-16 ...
- C#委托和事件讲解
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每 ...
- python使用xlrd模块读写Excel文件的方法
本文实例讲述了python使用xlrd模块读写Excel文件的方法.分享给大家供大家参考.具体如下: 一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi ...
- 最小费用最大流 POJ2195-Going Home
网络流相关知识参考: http://www.cnblogs.com/luweiseu/archive/2012/07/14/2591573.html 出处:優YoU http://blog.csdn. ...
- linux内存文件系统之指南
内存文件系统使用及示例:ramdisk, ramfs, tmpfs 第一部分在Linux中可以将一部分内存mount为分区来使用,通常称之为RamDisk. RamDisk有三种实现方式: 第一种就是 ...