【bzoj1951】: [Sdoi2010]古代猪文

因为999911659是个素数

欧拉定理得

然后指数上中国剩余定理

然后分别lucas定理就好了

注意G==P的时候的特判

 /* http://www.cnblogs.com/karl07/ */
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define ll long long const ll P=;
const ll p1[] = {, , , , };
const ll N=;
ll g,n,cnt=;
ll fac[N+],ifac[N+];
ll p[N],ans[]; ll Q_pow(ll a,ll b,ll p){
ll ans=;
while (b){
if (b&) ans=ans*a%p;
a=a*a%p;
b=(b>>);
}
return ans;
} void FAC(ll p){
ifac[]=fac[]=;
for (int i=;i<=N;i++) fac[i]=fac[i-]*i%p,ifac[i]=Q_pow(fac[i],p-,p);
} ll C(ll n,ll m,ll p){
if (m>n) return ;
return fac[n]*ifac[m]%p*ifac[n-m]%p;
} ll lucas(ll n,ll m,ll p){
if (m==) return ;
return lucas(n/p,m/p,p)*C(n%p,m%p,p)%p;
} void fj(ll x){
for (int i=;i*i<=x;i++){
if (x%i==){
p[++cnt]=i;
if (i*i!=x) p[++cnt]=n/i;
}
}
} ll gcd(ll a,ll b){return b ? gcd(b,a%b) : a;} void ex_gcd(ll a,ll b,ll &x,ll &y){
if (b==){x=;y=;return;}
ex_gcd(b,a%b,y,x);
y-=x*(a/b);
} ll China(){
ll a0=ans[],p0=p1[];
for (int i=;i<=;i++){
ll x,y,g=gcd(p0,p1[i]);
ex_gcd(p0,p1[i],x,y);
x=(x*(ans[i]-a0)%p1[i]+p1[i])%p1[i];
a0=a0+x*p0;
p0=p0/g*p1[i];
}
return a0;
} void work(){
for(int i=;i<=;i++){
FAC(p1[i]);
for (int j=;j<=cnt;j++){
ans[i]=(ans[i]+lucas(n,n/p[j],p1[i]))%p1[i];
}
}
printf("%lld\n",Q_pow(g,China(),P));
} int main(){
scanf("%lld%lld",&n,&g);
if (g==P) {puts(""); return ;}
fj(n);
work();
return ;
}
  

各种zz的错误。。调了一年

而且跑的巨慢无比。。

【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理的更多相关文章

  1. BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】

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

  2. bzoj 1951: [Sdoi2010]古代猪文 【中国剩余定理+欧拉定理+组合数学+卢卡斯定理】

    首先化简,题目要求的是 \[ G^{\sum_{i|n}C_{n}^{i}}\%p \] 对于乘方形式快速幂就行了,因为p是质数,所以可以用欧拉定理 \[ G^{\sum_{i|n}C_{n}^{i} ...

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

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951 题意就是要求 G^( ∑(k|n) C(n,k) ) % p,用费马小定理处理指数,卢 ...

  4. 【BZOJ1951】古代猪文(CRT,卢卡斯定理)

    [BZOJ1951]古代猪文(CRT,卢卡斯定理) 题面 BZOJ 洛谷 题解 要求什么很显然吧... \[Ans=G^{\sum_{k|N}{C_N^k}}\] 给定的模数是一个质数,要求解的东西相 ...

  5. BZOJ 1951: [Sdoi2010]古代猪文( 数论 )

    显然答案是G^∑C(d,N)(d|N).O(N^0.5)枚举N的约数.取模的数999911659是质数, 考虑欧拉定理a^phi(p)=1(mod p)(a与p互质), 那么a^t mod p = a ...

  6. BZOJ1951 [Sdoi2010]古代猪文 中国剩余定理 快速幂 数论

    原文链接http://www.cnblogs.com/zhouzhendong/p/8109156.html 题目传送门 - BZOJ1951 题意概括 求 GM mod 999911659 M=∑i ...

  7. BZOJ1951[SDOI2010]古代猪文

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

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

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

  9. BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)

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

随机推荐

  1. hihoCoder#1322(树的判定)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个包含 N 个顶点 M 条边的无向图 G ,判断 G 是不是一棵树. 输入 第一个是一个整数 T ,代表测试数据的组 ...

  2. HDU4006(小根堆)

    The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Oth ...

  3. Oracle 静默安装的db_install.rsp 文件

    Oracle 静默安装的db_install.rsp 文件,已修改好值 ################################################################ ...

  4. arm开发板6410/2440上mjpg-streamer网络视频服务器移植

    摄像头移植 一.环境 主机环境 :ubuntu 10.10         目标板 :FS-S5PC100 主机工具链 :gcc-4.4.5         交叉工具链 :arm-unknown-li ...

  5. Rails通过页面Debug

    <%= debug(headers) %>--在视图中显示伴随请求的头部信息 <%= debug(params) %>--在视图中显示请求中的参数 <%= debug(a ...

  6. 玩school 学习sql server 查询的网站

    http://www.w3school.com.cn/sql/sql_like.asp

  7. xcopy 命令行

    https://www.cnblogs.com/yang-hao/p/6003308.html xcopy-参数详解   XCOPY——目录复制命令  1.功能:复制指定的目录和目录下的所有文件连同目 ...

  8. C# Remoting 简单实现

    此处下载源代码(VS2010编译通过)   http://files.cnblogs.com/files/qqhfeng/%E8%BF%9C%E7%A8%8B%E8%B0%83%E7%94%A8%E6 ...

  9. LaTeX数学公式基础

    LaTeX数学公式 参考:https://www.cnblogs.com/Sinte-Beuve/p/6160905.html 原博客显示有点问题,重新搬运整理LaTeX数学公式部分的基本用法 基础 ...

  10. sqlserver 查询int类型 in (字符串) 报转换int类型出错的问题

    , , '') ) AS c_departNames FROM t_user AS A LEFT JOIN t_role AS B ON A.c_roleId=B.c_roleId 用 CHARIND ...