古代猪文

题目描述

猪王国的文明源远流长,博大精深。 iPig在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为N。当然,一种语言如果字数很多,字典也相应会很大。当时的猪王国国王考虑到如果修一本字典,规模有可能远远超过康熙字典,花费的猪力、物力将难以估量。故考虑再三没有进行这一项劳猪伤财之举。当然,猪王国的文字后来随着历史变迁逐渐进行了简化,去掉了一些不常用的字。 iPig打算研究古时某个朝代的猪文文字。根据相关文献记载,那个朝代流传的猪文文字恰好为远古时期的k分之一,其中k是N的一个正约数(可以是1和N)。不过具体是哪k分之一,以及k是多少,由于历史过于久远,已经无从考证了。 iPig觉得只要符合文献,每一种能整除N的k都是有可能的。他打算考虑到所有可能的k。显然当k等于某个定值时,该朝的猪文文字个数为N / k。然而从N个文字中保留下N / k个的情况也是相当多的。iPig预计,如果所有可能的k的所有情况数加起来为P的话,那么他研究古代文字的代价将会是G的P次方。 现在他想知道猪王国研究古代文字的代价是多少。由于iPig觉得这个数字可能是天文数字,所以你只需要告诉他答案除以999911659的余数就可以了。

输入格式

有且仅有一行:两个数N、G,用一个空格分开。

输出格式

有且仅有一行:一个数,表示答案除以999911659的余数。

样例输入

4 2

样例输出

2048

题解

思路

观察题目,不难发现,我们需要在给定 \(G\) , \(N\) 的情况下,求\(G^{\sum_{i|N}C_N^i} \ mod \ 999911659\)
的值。所以,我们只需要求出 \(G\) 的幂的值就可以进行计算。
然而数据范围告诉我们,先求 \(\sum_{i|N}C_N^i\) 再进行计算是会爆空间的。所以,我们利用费马小定理的一个推论。
\(a^b\equiv a^{b \ mod \ (p-1)}\pmod{p} \ \ \ \ \ \ (a\ne p)\)
于是,我们考虑对组合数取模。发现 \(p-1\) ,即 \(999911658\) 不是质数,将它分解,得 \(2*3*4679*35617\) 。所以,我们先利用Lucas定理对组合数分别取模,然后用中国剩余定理求出 \(G\) 的幂,最后用快速幂求得答案。

代码

卢卡斯定理:
int C(int n,int m,int x){
    if(n<m)return 0;
    return fac[x][n]*inverse(fac[x][n-m]*fac[x][m],t[x])%t[x];
}//fac为对于4个质数分别预处理的阶乘,inverse为逆元。
int lucas(int n,int m,int x){
    if(m==0)return 1;
    return C(n%t[x],m%t[x],x)*lucas(n/t[x],m/t[x],x)%t[x];
}

中国剩余定理:

int Chinese_Remainder_Theorem(){
    int a1,b1,a2,b2,a,b,c,x,y;
    a1=t[0],b1=ANS[0];
    for(int i=1;i<4;i++){
        a2=t[i],b2=ANS[i];
        a=a1;b=a2;c=b2-b1;
        exgcd(a,b,x,y);
        x=((c*x)%b+b)%b;
        b1=b1+a1*x;a1=a1*b;
    }
    return b1;//ANS记录对于4个质数取模得到的不同答案,t存储四个质数
}
void exgcd(int a,int b,int &x,int &y){
    if(b==0){x=1;y=0;return;}
    exgcd(b,a%b,x,y);
    int t=x;x=y;y=t-a/b*y;
}

转载于:https://www.cnblogs.com/floatingcloak/p/10342672.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值