题目链接

这题出的有点nb,PKU: Pig Kingdom University , NOIP: National Olympics in Informatic of Pigs。。。

题意:求\(G^{\sum_{d|n}C_n^d}mod\ 999911659\)

根据费马小定理的推论,题目可以转化为求\(G^{\sum_{d|n}C_n^dmod999911658}mod\ 999911659\)

对\(999911658\)分解质因数可得\(999911658=2\times3\times4679\times35617\)

枚举这4个数,再枚举\(n\)的因子\(d\),预处理阶乘和逆元,用Lucas定理求出\(\sum_{d|n}C_n^d\),最后用中国剩余定理合并就行了。

#include <cstdio>
#include <cstdlib>
#include <cmath>
typedef long long ll;
const int MAXN = 40000; // The Biggest Prime
const int MOD = 999911659;
const int MO = 999911658;
const int prime[6] = {233, 2, 3, 4679, 35617};
const int M = 4;
int n, q;
int fact[MAXN], inv[MAXN], a[M + 2], t[M + 2];
int C(int n, int m, int mod){
if(n < m) return 0;
return fact[n] * inv[fact[m]] % mod * inv[fact[n - m]] % mod;
}
int Lucas(int n, int m, int mod){
if(!m) return 1;
return C(n % mod, m % mod, mod) * Lucas(n / mod, m / mod, mod) % mod;
}
int Pow(int q, int k, int mod){
int ans = 1;
while(k){
if(k & 1) ans = ((long long)ans * q) % mod;
k >>= 1;
q = (long long)q * q % mod;
}
return ans;
}
int Crt(int a[]){
int ans = 0;
for(int i = 1; i <= M; ++i){
int tmp = MOD / prime[i];
ans = ((long long)ans + (long long)a[i] * tmp % MO * Pow(tmp, prime[i] - 2, prime[i])) % MO;
}
return ans;
}
int main(){
scanf("%d%d", &n, &q);
if(q % MOD == 0){
printf("0\n");
return 0;
}
inv[1] = 1;
fact[1] = 1;
fact[0] = 1;
for(int i = 1; i <= M; ++i){
for(int j = 2; j <= prime[i]; ++j)
fact[j] = (fact[j - 1] * j) % prime[i], inv[j] = (prime[i] - prime[i] / j) * inv[prime[i] % j] % prime[i];
for(int d = 1; d * d <= n; ++d){
if(n % d) continue;
a[i] = (a[i] + Lucas(n, d, prime[i])) % prime[i];
if(d * d == n) continue;
a[i] = (a[i] + Lucas(n, n / d, prime[i])) % prime[i];
}
}
printf("%d\n", Pow(q, Crt(a), MOD));
return 0;
}

【洛谷 P2480】 [SDOI2010]古代猪文(中国剩余定理,Lucas定理)的更多相关文章

  1. 洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)

    洛谷题目传送门 蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事. 题意一行就能写下来: 给定\(N,G\),求\(G^{\sum \limits _{d| ...

  2. 洛谷 P2480 [SDOI2010]古代猪文 解题报告

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

  3. 洛谷 P2480 [SDOI2010]古代猪文 题解【欧拉定理】【CRT】【Lucas定理】

    数论综合题. 题目背景 题目背景与题目无关因此省略.题目链接 题目描述 猪王国的文明源远流长,博大精深. iPig 在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为 \(N\).当然,一种语 ...

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

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

  5. 洛谷P2480 [SDOI2010]古代猪文

    要求(图是盗来的QAQ) 首先用欧拉定理把幂模一下,直接就是MOD-1了 然后发现MOD-1可以分解为2,3,4679,35617,都是质数,可以直接用Lucas定理 然后用中国剩余定理合并一下即可 ...

  6. 洛咕 P2480 [SDOI2010]古代猪文

    洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...

  7. 【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理

    [bzoj1951]: [Sdoi2010]古代猪文 因为999911659是个素数 欧拉定理得 然后指数上中国剩余定理 然后分别lucas定理就好了 注意G==P的时候的特判 /* http://w ...

  8. 【洛谷P2480】古代猪文

    题目大意:求 \[ G^{\sum\limits_{d|N}\binom{n}{k}} mod\ \ 999911659 \] 题解:卢卡斯定理+中国剩余定理 利用卢卡斯定理求出指数和式对各个素模数的 ...

  9. 【题解】P2480 [SDOI2010]古代猪文 - 卢卡斯定理 - 中国剩余定理

    P2480 [SDOI2010]古代猪文 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 猪王国的文明源远流长,博大精 ...

  10. P2480 [SDOI2010]古代猪文

    P2480 [SDOI2010]古代猪文 比较综合的一题 前置:Lucas 定理,crt 求的是: \[g^x\bmod 999911659,\text{其中}x=\sum_{d\mid n}\tbi ...

随机推荐

  1. jq 一个强悍的json格式化查看工具

    本文来自网易云社区 作者:娄超 在web 2.0时代json这种直观.灵活.高效数据格式基本已经成为一种标准格式,从各种web api,到配置文件,甚至现在连mysql都开始支持json作为数据类型. ...

  2. android中的AIDL学习笔记

    一.定义 AIDL是用来解决进程间通信的(一般有四种方式:Activity.Service.ContentProvider.Broadcast Receiver),两个进程间无法直接通信,所以要用AI ...

  3. 【APUE】Chapter15 Interprocess Communication

    15.1 Introduction 这部分太多概念我不了解.只看懂了最后一段,进程间通信(IPC)内容被组织成了三个部分: (1)classical IPC : pipes, FIFOs, messa ...

  4. Ubuntu16.04安装Zabbix

    基于Zabbix+MySQL+Apache(可选) apt-get install php7.0-bcmath php7.0-xml php7.0-mbstring安装Zabbix所需的几个PHP模块 ...

  5. bug单的提交

    顶头信息 所属产品,所属项目,所属模块,影响版本,当前指派,bug类型:代码错误,界面优化,设计缺陷,性能问题,标准规范,其他,安全相关.bug标题,严重程度,优先级 缺陷描述 bug描述,预置条件, ...

  6. 容器基础(十): 使用kubernetes部署应用

    概述 使用之前的脚本(env/server.py 得到 env/server:v0.1 镜像, env/worker.py 得到 env/worker:v0.1)得到的镜像,在部署好kubernete ...

  7. Java 多态方法构造器执行方法

    我们参考下面这个例子: 读者可以提前考虑一下,这段程序的输出会是什么. public class Polymorphism { /** * 创建一个类A * 该类中有一个方法draw,以及一个构造方法 ...

  8. Android Studio的初体验

    在机缘巧合之下遇到了安卓开发,接触了Android Studio开始了漫长的改bug的道路,以下为简易版心酸历程 首先我需要成功安装Android Studio,由于我过于叛逆以及为了避免出错于是从一 ...

  9. ubuntu16.04 装了一天的gitlab

    1.安装gitlab baidu安装完了[后续再自己写安装过程] 2.遇到的问题 访问gitlab http://ip 可以进入页面也能操作但是console报404无法加载js和css,这样很不方便 ...

  10. CentOS7 最小化安装vmware-tools

    花了一上午的时间在1611上安装vmware-tool,总不能全部顺利安装成功 结合网上资料,整理出正确流程 下载最新的CentOS-7-x86_64-Minimal-1708 安装之后 联网 yum ...