bzoj1951 [Sdoi2010]古代猪文 ——数论综合

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951

题意就是要求 G^( ∑(k|n) C(n,k) ) % p,用费马小定理处理指数,卢卡斯定理处理大组合数,取模用中国剩余定理合并;

好想难写的感觉(其实也不难写?);

关于中国剩余定理,可以看这篇博客:https://www.cnblogs.com/MashiroSky/p/5918158.html

第一次写中国剩余定理合并模数,还有一点不解的地方,写在注释里。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
ll n,g,p=999911659,t[4]={2,3,4679,35617},r[5],fac[5][40005];
ll pw(ll a,int b,int mod)
{
//    a%=mod;//可有可无
    ll ret=1;
    for(;b;b>>=1,(a*=a)%=mod)
        if(b&1) (ret*=a)%=mod;
    return ret;
}
ll C(int n,int m,int k)
{
    if(n<m)return 0;
    return (fac[k][n]*pw(fac[k][m]*fac[k][n-m],t[k]-2,t[k]))%t[k];
}
ll Lucas(ll n,ll m,int k)
{
    if(m==0)return 1;//!
    return (C(n%t[k],m%t[k],k)*Lucas(n/t[k],m/t[k],k))%t[k];
}
void exgcd(ll a,ll b,ll &x,ll &y)
{
    if(b==0){x=1; y=0; return;}
    exgcd(b,a%b,x,y);
    ll t=x; x=y; y=t-a/b*y;
}
int CRT()
{
    ll M=t[0],R=r[0],x,y;
    for(int i=1;i<4;i++)
    {
        exgcd(M,t[i],x,y);
        x=((r[i]-R)%t[i]*x%t[i]+t[i])%t[i];//%t[i]!(CRT取通解方法)  //不能是R-r[i]?
        R+=M*x;
        M*=t[i];
    }
    return R;
}
int main()
{
    scanf("%lld%lld",&n,&g);
    if(g==p)//!!!
    {
        printf("0"); return 0;
    }
    for(int i=0;i<4;i++)
    {
        fac[i][0]=1;
        for(int j=1;j<=t[i];j++)
            fac[i][j]=(fac[i][j-1]*j)%t[i];
    }
    for(int j=0;j<4;j++)
        for(int i=1;i*i<=n;i++)//1
            if(n%i==0)
            {
                (r[j]+=Lucas(n,i,j))%=t[j];
                if(i*i!=n) (r[j]+=Lucas(n,n/i,j))%=t[j];
            }
    int ans=CRT();
    printf("%lld",pw(g,ans,p));
    return 0;
}

原文地址:https://www.cnblogs.com/Zinn/p/9259691.html

时间: 2024-07-30 05:15:52

bzoj1951 [Sdoi2010]古代猪文 ——数论综合的相关文章

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

Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃

BZOJ1951 [Sdoi2010]古代猪文

本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! 题目链接:BZOJ1951 正解:中国剩余定理+费马小定理+$Lucas$定理 解题报告: 这道题可以说是数论+组合大综合题- 题目求的是$\sum_{d|n} g^{C_n^d}$,模数$p$是质数(特判$g=p!$),根据费马小定理,我们可以把幂上的数

1951: [Sdoi2010]古代猪文|数论大合集

做这个题大概需要直到以下姿势:快速幂,费马小定理,卢卡斯定理,中国剩余定理.(大概也就这些 题目大概是让求 g∑d|nCdnmodp 然后根据费马小定理原式 =g∑d|nCdnmod(p?1)modp 然后也就是要求指数上的这个东西 ∑d|nCdnmod(p?1) 然后p?1还不是质数..需要分解成质因子然后用中国剩余定理合并,然后还要求组合数还要卢卡斯定理,最后特判一下g=p的情况 #include<algorithm> #include<iostream> #include&l

BZOJ 1951 SDOI2010 古代猪文 数论 Lucas定理

题目大意:给定N,G,求 首先由欧拉定理易知当A与p互质时A^B %p=A^(B%φ(p) ) %p 这里p是一个质数 于是φ(p)=p-1=999911658 然后由于这个数不是质数 难以处理 我们将它分解质因数 然后对于每个质因数的解用中国剩余定理合并即可 然后就是999911658有一个很好的性质 999911658=2*3*4679*35617 每个质因数的次数都是1次 于是我们可以套用卢卡斯定理 预先处理出对于每个质因数的阶乘和阶乘的逆元即可 注意此题有个细节 就是欧拉定理中a与p必须

bzoj千题计划323:bzoj1951: [Sdoi2010]古代猪文(Lucas+CRT+欧拉定理)

https://www.lydsy.com/JudgeOnline/problem.php?id=1951 先欧拉降幂 然后模数质因数分解 分别计算组合数的结果,中国剩余定理合并 #include<cmath> #include<cstdio> #include<iostream> using namespace std; const int mod=999911659; const int phi=mod-1; typedef long long LL; int p[

P2480 [SDOI2010]古代猪文

P2480 [SDOI2010]古代猪文 题目背景 “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔

1951: [Sdoi2010]古代猪文

1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2171  Solved: 904[Submit][Status][Discuss] Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时

bzoj 1951 [Sdoi2010]古代猪文(数论知识)

Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃花源了.猪

【BZOJ 1951】 [Sdoi2010]古代猪文

Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃花源了.猪