首先假设输入的是n,m

我们就是要求m^(Σ(c(n,i) i|n)) mod p

那么根据费马小定理,上式等于

m^(Σ(c(n,i) i|n) mod  (p-1)) mod p

那么问题的关键就是求 Σ(c(n,i) i|n) mod  (p-1)了

那么如果P是素数的话,我们可以用lucas定理来快速求出来组合数,这道题的p-1是

非素数,那么我们分解质因数pi,假设c(n,i) i|n为X,那我们求出来X mod pi=ai,这个是

符合lucas定理的,那么我们可以得到质因子数个式子(本题有4个质因子),然后我们用

中国剩余定理合并这4个式子就行了

/**************************************************************
    Problem:
    User: BLADEVIL
    Language: Pascal
    Result: Accepted
    Time: ms
    Memory: kb
****************************************************************/
 
//By BLADEVIL
const
    d39                     =;
    pp                      :array[..] of longint=(,,,);
     
var
    n, m, k                 :int64;
    cc                      :int64;
    a                       :array[..] of int64;
    i                       :longint;
    fac                     :array[..] of int64;
     
function ex_gcd(a,b:int64):int64;
var
    z                       :int64;
begin
    if b= then
    begin
        ex_gcd:=;
        cc:=;
        exit;
    end else
    begin
        z:=ex_gcd(b,a mod b);
        ex_gcd:=cc;
        cc:=z-(a div b)*cc;
    end;
end;   
 
function gcd(a,p:int64):int64;
begin
    gcd:=ex_gcd(a,p);
    gcd:=(gcd mod p+p) mod p;
end;
     
function combine(a,b,p:int64):int64;
var
    ans1, ans2              :int64;
    i                       :longint;
begin
    ans1:=fac[a] mod p;
    ans2:=(fac[a-b]*fac[b]) mod p;
    ans2:=gcd(ans2,p);
    combine:=ans1*ans2 mod p;
end;
     
function lucas(x,y,p:int64):int64;
var
    a, b                    :int64;
begin
    if y= then exit();
    a:=x mod p;
    b:=y mod p;
    if a<b then exit() else lucas:=lucas(x div p,y div p,p)*combine(a,b,p);
end;   
 
function crt:int64;
var
    i                       :longint;
begin
    crt:=;
    for i:= to do
        crt:=(crt+a[i]*((d39-) div pp[i])*gcd((d39-) div pp[i],pp[i])) mod (d39-);
end;
 
function get(x:int64):int64;
var
    i, j                    :longint;
begin
        for i:= to trunc(sqrt(x)) do
        begin
            if x mod i= then
            begin
                for j:= to do
                begin
                    a[j]:=(a[j]+lucas(x,i,pp[j])) mod pp[j];
                    if x div i<>i then a[j]:=(a[j]+lucas(x,x div i,pp[j])) mod pp[j];
                end;
            end;
        end;
    get:=crt;
end;
 
function mi(n,k,p:int64):int64;
var
    sum                     :int64;
begin
    mi:=;
    sum:=n;
    while k<> do
    begin
        if k mod = then mi:=mi*sum mod p;
        sum:=sum*sum mod p;
        k:=k div ;
    end;
end;
 
begin
    fac[]:=;
    for i:= to pp[] do fac[i]:=fac[i-]*int64(i) mod (d39-);
    read(n,m);
    if m mod d39= then
    begin
        writeln();
        halt;
    end;
    k:=get(n);
    writeln(mi(m,k,d39));
end.

bzoj 1951 lucas crt 费马小定理的更多相关文章

  1. BZOJ.1951.[SDOI2010]古代猪文(费马小定理 Lucas CRT)

    题目链接 \(Description\) 给定N,G,求\[G^{\sum_{k|N}C_n^k}\mod\ 999911659\] \(Solution\) 由费马小定理,可以先对次数化简,即求\( ...

  2. [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT

    Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...

  3. 【BZOJ1951】【SDOI2010】古代猪文 Lucas定理、中国剩余定理、exgcd、费马小定理

    Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  4. [CodeVs1515]跳(lucas定理+费马小定理)

    嘿嘿嘿好久没写数学题了,偶尔看到一道写一写... 题目大意:一个(n+1)*(m+1)[0<=n, m<=10^12,n*m<=10^12]的矩阵,C(0,0)=1,C(x,y)=C ...

  5. 【bzoj1951】[Sdoi2010]古代猪文 费马小定理+Lucas定理+中国剩余定理

    题目描述 求  $g^{\sum\limits_{k|n}C_{n}^{\frac nk}}\mod 999911659$ 输入 有且仅有一行:两个数N.G,用一个空格分开. 输出 有且仅有一行:一个 ...

  6. hdu 3037 费马小定理+逆元除法取模+Lucas定理

    组合数学推推推最后,推得要求C(n+m,m)%p 其中n,m小于10^9,p小于1^5 用Lucas定理求(Lucas定理求nm较大时的组合数) 因为p数据较小可以直接阶乘打表求逆元 求逆元时,由费马 ...

  7. BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 123   Solved: 73 [ Submit][ St ...

  8. 【BZOJ】3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(排列组合+乘法逆元+欧拉定理/费马小定理)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3398 以下牡牛为a,牝牛为b. 学完排列计数后试着来写这题,“至少”一词可以给我们提示,我们可以枚举 ...

  9. BZOJ 3240 [Noi2013]矩阵游戏 ——费马小定理 快速幂

    发现是一个快速幂,然而过不去. 怎么办呢? 1.十进制快速幂,可以用来练习卡时. 2.费马小定理,如果需要乘方的地方,可以先%(p-1)再计算,其他地方需要%p,所以需要保存两个数. 然后就是分类讨论 ...

随机推荐

  1. 如何修改Github上提交的错误用户地址和姓名

    Changing author info  https://help.github.com/articles/changing-author-info/   To change the name an ...

  2. redux使用过程中遇到的两个致命的关键点

    一.在reducer中,返回的state必须是全新的对象,否则,redux不会执行listening方法,因为redux会认为state没有更新过,没必要重新渲染view. 出现问题的例子: cons ...

  3. CSS3 :animation 动画

    CSS3动画分为二部份: 1.定义动画行为: 使用@keyframes定义动画行为,有两种方式: 方式一:仅定义动画起始样式,与动画结束样式 @keyframes (动画行为名称) { from {b ...

  4. Mysql性能优化三:主从配置,读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  5. python基础训练营01

    一.基础讲解: 1.1 文件末尾的.py后缀,指出这个文件,是一个python文件,因此,系统将使用python解释器来运行该文件,确定文件中每一个单词的含义. 1.2 python编辑/运行方法: ...

  6. 贝叶斯网(1)尝试用Netica搭建简单的贝叶斯网并使用贝叶斯公式解释各个bar的结果

    近来对贝叶斯网十分感兴趣,按照博客<读懂概率图模型:你需要从基本概念和参数估计开始>给出的第一个例子,试着搭建了一个student网. (1)点击绿F,对条件概率表予以输入(包括两个祖先节 ...

  7. 学习bash——环境配置

    一.环境配置文件的重要性 Bash在启动时直接读取这些配置文件,以规划好bash的操作环境. 即使注销bash,我们的设置仍然保存. 二.login shell 通过完整的登录流程取得的bash,称为 ...

  8. Java IO流-File类的使用示例-创建文件夹和文件的正确方法

    当创建一个文件时,比如:E:\\test\\test.txt,此时若文件夹test不存在,那么直接创建文件会出错,故首先要判断文件夹是否存在,不存在的话要首先创建文件夹. public class F ...

  9. pta数组作业

    7-2 设计思路:本题要求处理数据并输出最大值及其对应的最小下标,首先输入n,然后定义一个长度为n的数组用于存储数据,定义m=a[0],n=0,从a[1]开始与m进行比较,若某项大于m,就把该项的值赋 ...

  10. Delphi GetCurrentDir 获取当前文件夹

    //获取当前文件夹 GetCurrentDirvardir: string;begindir := GetCurrentDir;ShowMessage(dir); //C:\Documents and ...