洛谷P2480 古代猪文
这道题把我坑了好久......
原因竟是CRT忘了取正数!
题意:求
指数太大了,首先用欧拉定理取模。
由于模数是质数所以不用加上phi(p)
然后发现phi(p)过大,不能lucas,但是它是个square free,可以分解质因数然后lucas然后CRT。
然后就没有然后了......模板套来套去......
注意CRT的结果可能是负数,要取正。
- #include <cstdio>
- #include <algorithm>
- #define say(a) printf(#a); printf(" = %lld \n", a)
- typedef long long LL;
- const int N = ;
- const LL MO = ;
- const LL prime[] = {, , , };
- int T;
- LL n, G;
- LL nn[][N], inv[][N], invn[][N], aa[];
- inline LL qpow(LL a, LL b, LL c) {
- LL ans = ;
- while(b) {
- if(b & ) {
- ans = ans * a % c;
- }
- a = a * a % c;
- b = b >> ;
- }
- return ans;
- }
- LL C(int a, int b) {
- return nn[T][a] * invn[T][b] % prime[T] * invn[T][a - b] % prime[T];
- }
- LL lucas(int a, int b) {
- if(!b) {
- return ;
- }
- return C(a % prime[T], b % prime[T]) * lucas(a / prime[T], b / prime[T]) % prime[T];
- }
- LL exgcd(LL a, LL b, LL &x, LL &y) {
- if(!b) {
- x = ;
- y = ;
- return a;
- }
- LL g = exgcd(b, a % b, x, y);
- std::swap(x, y);
- y -= (a / b) * x;
- return g;
- }
- inline void prework(int h) {
- inv[h][] = ;
- LL p = prime[h];
- for(int i = ; i < p; i++) {
- inv[h][i] = (p - p / i) * inv[h][p % i] % p;
- }
- nn[h][] = ;
- invn[h][] = ;
- for(int i = ; i < p; i++) {
- nn[h][i] = nn[h][i - ] * i % p;
- invn[h][i] = invn[h][i - ] * inv[h][i] % p;
- }
- return;
- }
- inline LL CRT() {
- LL M = MO - , ans = , b, t;
- for(int i = ; i < ; i++) {
- LL m = M / prime[i];
- exgcd(m, prime[i], t, b);
- t = (t % M + M) % M;
- ans += aa[i] * m % M * t % M;
- ans %= M;
- }
- return ans;
- }
- int main() {
- scanf("%lld%lld", &n, &G);
- if(G == MO) {
- printf("");
- return ;
- }
- for(int i = ; i < ; i++) {
- prework(i);
- }
- for(T = ; T < ; T++) {
- for(int i = ; i * i <= n; i++) {
- if(n % i) {
- continue;
- }
- aa[T] += lucas(n, i);
- aa[T] %= prime[T];
- if(i * i < n) {
- aa[T] += lucas(n, n / i);
- aa[T] %= prime[T];
- }
- }
- //printf("aa[%d] = %lld \n", T, aa[T]);
- }
- LL ans = CRT();
- //printf("ans = %lld \n", ans);
- ans = qpow(G, ans, MO);
- printf("%lld\n", ans);
- return ;
- }
AC代码
洛谷P2480 古代猪文的更多相关文章
- 洛谷 [P2480] 古代猪文
卢卡斯定理 注意特判底数和模数相等的情况 http://www.cnblogs.com/poorpool/p/8532809.html #include <iostream> #inclu ...
- 洛谷 P2480 [SDOI2010]古代猪文 解题报告
P2480 [SDOI2010]古代猪文 题目背景 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" ...
- 洛咕 P2480 [SDOI2010]古代猪文
洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...
- 【题解】古代猪文 [SDOI2010] [BZOJ1951] [P2480]
[题解]古代猪文 [SDOI2010] [BZOJ1951] [P2480] 在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心 ...
- 【题解】P2480 [SDOI2010]古代猪文 - 卢卡斯定理 - 中国剩余定理
P2480 [SDOI2010]古代猪文 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 猪王国的文明源远流长,博大精 ...
- P2480 [SDOI2010]古代猪文
P2480 [SDOI2010]古代猪文 比较综合的一题 前置:Lucas 定理,crt 求的是: \[g^x\bmod 999911659,\text{其中}x=\sum_{d\mid n}\tbi ...
- 【BZOJ1951】[SDOI2010]古代猪文
[BZOJ1951][SDOI2010]古代猪文 题面 bzoj 洛谷 题解 题目实际上是要求 $ G^{\sum d|n\;C_n^d}\;mod \; 999911659 $ 而这个奇怪的模数实际 ...
- 【BZOJ1951】古代猪文(CRT,卢卡斯定理)
[BZOJ1951]古代猪文(CRT,卢卡斯定理) 题面 BZOJ 洛谷 题解 要求什么很显然吧... \[Ans=G^{\sum_{k|N}{C_N^k}}\] 给定的模数是一个质数,要求解的东西相 ...
- luogu_2480: 古代猪文
洛谷:2480古代猪文 题意描述: 给定两个整数\(N,G\),求$G^{\sum_{k|n}C_n^k} mod 999911659 $. 数据范围: \(1\leq N\leq 10^9,1\le ...
随机推荐
- Express app.listen 函数了解
最近一直在学习如何用原生的 Node.js 来做一个网站.在写的同时也在学习 Express 源码. 一直觉得 Express 开启服务器的方法挺有趣的,就看了一下. 在 Express 运行的时候会 ...
- Servlet——提交表单信息,Servlet之间的跳转
HTML表单标签:<form></form> 属性: actoion: 提交到的地址,默认为当前页面 method: 表单提交方式 有get和post两种方式,默认为get ...
- POJ1035&&POJ3080&&POJ1936
字符串处理专题,很早就写好了然而忘记写blog了 1035 题意:给你一些单词作为字典.然后让你查找一些单词.对于每个单词,如果在字典中就输出它.否则输出所有它通过删除||增加||替换一个字符能得到的 ...
- Ubuntu16.04LTS +Qt+boost1.66编译错误:consuming_buffers.hpp: parse error in template argument list
升级gcc版本至 6 以上.. 安装gcc-6系列与安装boost (Ubuntu16.04LTS)
- Java关键字 Finally执行与break, continue, return等关键字的关系
长文短总结: 在程序没有在执行到finally之前异常退出的情况下,finally是一定执行的,即在finally之前的return语句将在finally执行之后执行. finally总是在控制转移语 ...
- GitHub 新手教程 三,Git Bash
1,通过 开始菜单 启动 Git Bash,或者 在 cmd 下执行以下命令: D:\SoftWare\Git\git-bash.exe --cd-to-home (D:\SoftWare\Git 是 ...
- PAT-1003 Emergency(Dijkstra)
1003 Emergency (25 分) As an emergency rescue team leader of a city, you are given a special map of y ...
- 学习 google file system 心得体会
Google File system文件系统,是在特别便宜的普通硬件设备上运行,它是一个面向大规模数据密集型运用的.可伸缩的分布式文件系统. 与传统文件相比,它认为组件失效是很平常的事件,因为GFS包 ...
- p4语言编程环境安装
p4语言主要是用来模拟交换机的交互,是新一代的SDN解决方案,可以让数据转发平面也具有可编程能力,让软件能够真正定义网络和网络设备.详细介绍 主要流程是:安装vmware.安装Ubuntu.下载Git ...
- c# 简易绘制C语言头文件包含关系图 v2.0
老规矩,先上图 节点样式说明: 1.粉色圆角,说明该节点下有循环引用 2.黄色菱形,说明该节点代表的文件在项目目录下未找到. 3.红色圆角,说明循环引用(从开始到最终,这种感情没变过,没有谁..... ...