#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 组合数取模 中国剩余定理的更多相关文章

  1. 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1<p<=1e6,p必须为素数

    typedef long long ll; /********************************** 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1&l ...

  2. 组合数取模(lucas定理+CRT合并)(AC)

    #include<bits/stdc++.h> #define re register #define int long long using namespace std; ; inlin ...

  3. 组合数取模及Lucas定理

    引入: 组合数C(m,n)表示在m个不同的元素中取出n个元素(不要求有序),产生的方案数.定义式:C(m,n)=m!/(n!*(m-n)!)(并不会使用LaTex QAQ). 根据题目中对组合数的需要 ...

  4. 组合数取模介绍----Lucas定理介绍

    转载https://www.cnblogs.com/fzl194/p/9095177.html 组合数取模方法总结(Lucas定理介绍) 1.当n,m都很小的时候可以利用杨辉三角直接求. C(n,m) ...

  5. 组合数取模&&Lucas定理题集

    题集链接: https://cn.vjudge.net/contest/231988 解题之前请先了解组合数取模和Lucas定理 A : FZU-2020  输出组合数C(n, m) mod p (1 ...

  6. 组合数取模Lucas定理及快速幂取模

    组合数取模就是求的值,根据,和的取值范围不同,采取的方法也不一样. 下面,我们来看常见的两种取值情况(m.n在64位整数型范围内) (1)  , 此时较简单,在O(n2)可承受的情况下组合数的计算可以 ...

  7. hdu 3944 DP? 组合数取模(Lucas定理+预处理+帕斯卡公式优化)

    DP? Problem Description Figure 1 shows the Yang Hui Triangle. We number the row from top to bottom 0 ...

  8. lucas定理解决大组合数取模

    LL MyPow(LL a, LL b) { LL ret = ; while (b) { ) ret = ret * a % MOD; a = a * a % MOD; b >>= ; ...

  9. 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 ...

随机推荐

  1. c++primer 第四章编程练习答案

    4.13.1 #include<iostream> struct students { ]; ]; char grade; int age; }; int main() { using n ...

  2. Tomcat_总结_01_tomcat环境搭建

    一.准备条件 1.安装jdk 二.安装tomcat 1.下载tomcat 去官网下载  64-bit Windows zip  版本的tomcat,并解压 https://tomcat.apache. ...

  3. ContextMenuStrip 动态添加多级子菜单

    1.首先要实例化几个ToolStripItem(要为某一父菜单添加几个子菜单就实例化几个):方法如下: /*添加子菜单*/ ToolStripItem ts_1 = new ToolStripMenu ...

  4. Angular 隨記

    Windows下更新Node 和NPM方法 管理員模式打開powershell 執行以下命令: Set-ExecutionPolicy Unrestricted -Scope CurrentUser ...

  5. GMchess Linux下的中国象棋游戏

    gmchess,一款Linux下的中国象棋程序

  6. [转]Angular移除不必要的$watch之性能优化

    双向绑定是Angular的核心概念之一,它给我们带来了思维方式的转变:不再是DOM驱动,而是以Model为核心,在View中写上声明式标签.然后,Angular就会在后台默默的同步View的变化到Mo ...

  7. 用Azure上Cognitive Service的Face API识别人脸

    Azure在China已经发布了Cognitive Service,包括人脸识别.计算机视觉识别和情绪识别等服务. 本文将介绍如何用Face API识别本地或URL的人脸. 一 创建Cognitive ...

  8. 正值表达式匹配html标签的属性值

    今天由于工作的需求,需要获取html标签的属性值,立即想到了正则表达式,标签如下: <circle id="ap_test" cx="200" cy=&q ...

  9. PHP7卓越性能背后的原理有哪些?

    作者:韩天峰链接:http://www.zhihu.com/question/38148900/answer/75115687来源:知乎 PHP7在运行原理上与PHP5相比并没有变化,这与hhvm不同 ...

  10. [转载]将网卡(设备中断)绑定到特定CPU

    在前阵子看到HelloDB的一篇文章“MySQL单机多实例方案”中提到: 因为单机运行多个实例,必须对网络进行优化,我们通过多个的IP的方式,将多个MySQL实例绑定在不同的网卡上,从而提高整体的网络 ...