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

题面

BZOJ
洛谷

题解

要求什么很显然吧。。。
\[Ans=G^{\sum_{k|N}{C_N^k}}\]
给定的模数是一个质数,要求解的东西相当于是上面那坨东西的结果对于\(\varphi\)的取值。
但是\(\varphi\)不是质数,不好直接\(Lucas\)定理,把\(\varphi\)分解质因数之后,
直接\(CRT\)合并结果就好了,所以这个就是\(ex\_Lucas\)

#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
#define RG register
#define MAX 50000
#define MOD (999911659)
#define phi (999911658)
inline int read()
{RG int x=0,t=1;RG char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')t=-1,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return x*t;
}
int fpow(int a,int b,int P)
{int s=1;if(!a)return 0;while(b){if(b&1)s=1ll*s*a%P;a=1ll*a*a%P;b>>=1;}return s;
}
int pri[5]={0,2,3,4679,35617},tot=4;
int jc[5][MAX],jv[5][MAX],N,G,ans;
void pre(int P)
{jc[P][0]=1;for(int i=1;i<=pri[P];++i)jc[P][i]=1ll*jc[P][i-1]*i%pri[P];jv[P][pri[P]-1]=fpow(jc[P][pri[P]-1],pri[P]-2,pri[P]);for(int i=pri[P]-2;~i;--i)jv[P][i]=1ll*jv[P][i+1]*(i+1)%pri[P];
}
int C(int n,int m,int P){return 1ll*jc[P][n]*jv[P][m]%pri[P]*jv[P][n-m]%pri[P];}
int Lucas(int n,int m,int P)
{if(m>n)return 0;if(!m)return 1;if(n<pri[P]&&m<pri[P])return C(n,m,P);return 1ll*Lucas(n/pri[P],m/pri[P],P)*Lucas(n%pri[P],m%pri[P],P)%pri[P];
}
int exgcd(int a,int b,int &x,int &y)
{if(!b){x=1;y=0;return a;}int d=exgcd(b,a%b,y,x);y-=a/b*x;return d;
}
int CRT(int k)
{int x,y,a,ret=0;for(int i=1;i<=4;++i){a=Lucas(N,k,i);exgcd(phi/pri[i],pri[i],x,y);x=(x%pri[i]+pri[i])%pri[i];ret=(ret+1ll*a*x%phi*(phi/pri[i])%phi)%phi;}return (ret+phi)%phi;
}
int main()
{pre(1);pre(2);pre(3);pre(4);N=read();G=read()%MOD;for(int i=1;i*i<=N;++i)if(N%i==0){ans=(ans+CRT(i))%phi;if(i*i!=N)ans=(ans+CRT(N/i))%phi;}ans=fpow(G,ans,MOD);printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/cjyyb/p/9316332.html

【BZOJ1951】古代猪文(CRT,卢卡斯定理)相关推荐

  1. 洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)

    传送门 好吧我数学差的好像不是一点半点-- 题目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我们可以利用费马小定理$a^{k}\equiv a^{k\ mod\ (p ...

  2. BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)...

    数论神题了吧算是 1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1573 Solved: 650 [Submit ...

  3. 【bzoj1951】【古代猪文】Lucas定理+欧拉定理+孙子定理

    (上不了p站我要死了,当然是游戏原画啊) Description (题面倒是很有趣,就是太长了) 题意: 一个朝代流传的猪文文字恰好为N的k分之一,其中k是N的一个正约数(可以是1和N).不过具体是哪 ...

  4. BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]

    1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 2194  Solved: 919 [Submit][Statu ...

  5. P2480 [SDOI2010]古代猪文

    P2480 [SDOI2010]古代猪文 题目背景 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" ...

  6. 1951: [Sdoi2010]古代猪文

    http://www.lydsy.com/JudgeOnline/problem.php?id=1951 题意:求G^(C(N,N/K))%mod ( K|N) 1951: [Sdoi2010]古代猪 ...

  7. P2480 [SDOI2010]古代猪文(数论好题)

    P2480 [SDOI2010]古代猪文 题意: 给你n和g,求g∑d∣nCndmodpg^{\sum_{d|n}C_{n}^{d}}\bmod pg∑d∣n​Cnd​modp p=999911659 ...

  8. 【SDOI2010】古代猪文

    [SDOI2010]古代猪文 Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--&quo ...

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

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

最新文章

  1. 工业界AI项目落地的繁琐过程
  2. 删除排序数组中的重复数字 II
  3. Java 8 新特性 Optional 类学习,理解并应用。NullPointerException空值检测
  4. 三元运算符(TernaryOperator)
  5. JavaScript学习(六十七)—正则表达式学习总结
  6. Cyborg Genes UVA - 10723
  7. TypeScript入门学习笔记
  8. mysql 数据库基础教程(一)
  9. Google 数学之美系列整理
  10. Oracle 多行显示在一行详解(listagg)
  11. Oracle生成100万条测试数据的方法
  12. 解决系统任务管理器已经被管理员停用
  13. java 文件移动_java 文件移动
  14. 存储技术(一)-基本概念和技术发展
  15. 批量识别PDF/OFD/PNG/JPG电子发票到EXCEL
  16. 随笔--百度和迅雷的原理
  17. APP的缓存文件到底应该存在哪?
  18. 根据checkBox的状态,控制按钮可否点击。不可点击置灰
  19. Altium Designer 20 怎么新建工程
  20. 用Python写表白程序,给另一半一个惊喜

热门文章

  1. Thinkphp3.2在IIS中使用ISAPI_Rewrite去除index.php
  2. php二叉排序树,二叉排序树(建树)
  3. 在 Arch Linux 玩百度 Flash 战曲游戏乱码
  4. Service worker 的概念和用法
  5. 修改windows功能要开启哪个服务器,win7更改windows功能提示出现错误并非所有的功能被成功更改怎么办...
  6. 一键关闭服务器危险端口BAT文件安防篇
  7. java 将bean转化为map,将javabean转化为map对象
  8. 轻量级linux iso,antiX 17.2 发布,基于Debian的轻量级Linux发行版
  9. apk ionic 破损_ionic3-android打包完美解决
  10. web文件上传(一)--文件上传与json上传区别及方法