bzoj1951 组合数取模 中国剩余定理
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int a[4]={2,3,4679,35617};
int p[36000],b[4],n,g,ans,i,j,x,y,mod=999911658;
int power(int a,int b){//快速幂
int c=1;
for(;b;b>>=1){
if(b&1) c=(ll)c*a%mod;
a=(ll)a*a%mod;
}
return c;
}
void exgcd(int a,int b,int &x,int &y){
if(!b) {x=1,y=0; return;}
exgcd(b,a%b,x,y);
int z=x; x=y; y=z-y*(a/b);
}
int inv(int a,int p){//求乘法逆元
int x,y;
exgcd(a,p,x,y);
return (x%p+p)%p;
}
int calc(int x,int mod){//求C(n,x)%mod的值
int ans=1,y,a,b;
for(y=n;x;x/=mod,y/=mod){//lucas定理
a=x%mod,b=y%mod;
ans=(ll)ans*p[b]%mod*inv(p[a],mod)%mod*inv(b<a?0:p[b-a],mod)%mod;//p[n]是n的阶乘取模mod的结果。
}
return ans;
}
int main(){
cin>>n>>g;
g%=mod+1;
if(!g) {cout<<"0\n"; return 0;}
for(p[0]=i=1;i<=a[3];i++) p[i]=(ll)p[i-1]*i%mod;//预处理n的阶乘(处理到取模数就可以了)
for(i=1;i*i<=n;i++)
if(n%i==0){
for(j=0;j<4;j++) b[j]=(b[j]+calc(i,a[j]))%a[j];
if(i*i!=n)
for(j=0;j<4;j++) b[j]=(b[j]+calc(n/i,a[j]))%a[j];
}
for(i=0;i<4;i++){
exgcd(mod/a[i],a[i],x,y);
ans=(ans+(ll)x*(mod/a[i])%mod*b[i])%mod;
}
ans=(ans+mod)%mod,mod++;
ans=power(g,ans);
cout<<ans<<endl;
return 0;
}
bzoj1951 组合数取模 中国剩余定理的更多相关文章
- 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1<p<=1e6,p必须为素数
typedef long long ll; /********************************** 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1&l ...
- 组合数取模(lucas定理+CRT合并)(AC)
#include<bits/stdc++.h> #define re register #define int long long using namespace std; ; inlin ...
- 组合数取模及Lucas定理
引入: 组合数C(m,n)表示在m个不同的元素中取出n个元素(不要求有序),产生的方案数.定义式:C(m,n)=m!/(n!*(m-n)!)(并不会使用LaTex QAQ). 根据题目中对组合数的需要 ...
- 组合数取模介绍----Lucas定理介绍
转载https://www.cnblogs.com/fzl194/p/9095177.html 组合数取模方法总结(Lucas定理介绍) 1.当n,m都很小的时候可以利用杨辉三角直接求. C(n,m) ...
- 组合数取模&&Lucas定理题集
题集链接: https://cn.vjudge.net/contest/231988 解题之前请先了解组合数取模和Lucas定理 A : FZU-2020 输出组合数C(n, m) mod p (1 ...
- 组合数取模Lucas定理及快速幂取模
组合数取模就是求的值,根据,和的取值范围不同,采取的方法也不一样. 下面,我们来看常见的两种取值情况(m.n在64位整数型范围内) (1) , 此时较简单,在O(n2)可承受的情况下组合数的计算可以 ...
- hdu 3944 DP? 组合数取模(Lucas定理+预处理+帕斯卡公式优化)
DP? Problem Description Figure 1 shows the Yang Hui Triangle. We number the row from top to bottom 0 ...
- lucas定理解决大组合数取模
LL MyPow(LL a, LL b) { LL ret = ; while (b) { ) ret = ret * a % MOD; a = a * a % MOD; b >>= ; ...
- 2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)
J. Ceizenpok’s formula time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
随机推荐
- 解决:easygui.msgbox("Hello there!")报错:Tcl_Init error: Can't find a usable init.tcl in the following directories问题的解决
今天学习<父与子的编程之旅>,当看到运行第一个gui时(代码如下): import easygui easygui.msgbox("Hello there!") 发现报 ...
- ural 2020 Traffic Jam in Flower Town(模拟)
2020. Traffic Jam in Flower Town Time limit: 1.0 secondMemory limit: 64 MB Having returned from Sun ...
- Redis集群部署3.0
我用的Mac的终端 ------------------------- 1.Redis简介 centos(5.4) Redis是一个key-value存储系统.和Memcached类似,但是解决了断 ...
- ICE的Glacier2使用
1.使用Glacier2的步骤: A.编写一个Glacier2的配置文件,参见样例 B.设置Glacier2的访问鉴权(密码或者证书),passwords文件每行样例"test xx ...
- DWZ富客户端HTML框架
一.了解 概述:是中国人自己开发的基于jQuery实现的Ajax RIA开源框架. 目的:简单实用.扩展方便(在原有架构基础上扩展方便).快速开发.RIA思路.轻量级 使用:用html扩展的方式来代替 ...
- Gradle的快速入门
1.基础知识: Gradle提供了:构建项目的框架.但是其中起作用的是Plugin. Gradle在默认情况下提供了很多常用的Plugin.例如:构建Java的Plugin.还有war.Ear等. G ...
- Linux基础命令-echo
echo命令 功能:显示字符 (末尾自带换行功能) 语法:echo [-neE][字符串] 说明:echo会将输入的字符串送往标准输出.输出的字符串间以空白字符隔开, 并在最后加上换行号 -n 不在字 ...
- CentOS 7.2 PowerShell下安装Azure Module
目前Linux版本的PowerShell还是Alpha版本,所以很多功能不能使用. 比如通过Powershell命令:install-module AzureRM在线安装Azure的Module.但我 ...
- HZ 和 usleep最小睡眠时间(低精度定时器)
注:本文论述的情况是内核默认未开启高精度定时器. 不建议这么用,需要较高精度的定时器可参考本博客后面的文章. 一.先上结论 1.默认的HZ是100,usleep的最小时间是10ms: 2.将HZ修改为 ...
- shell脚本 - 快速到达目录
服务器中存放很多工程目录,通过ssh登录,需要手动敲命令,很麻烦,可以建立自动登录脚本 1.在服务器登录是默认的目录中建立脚本文件 vi drivers.sh #建立登录脚本 cd data/work ...