卢卡斯定理

注意特判底数和模数相等的情况

http://www.cnblogs.com/poorpool/p/8532809.html

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define ll long long
using namespace std;
const int MOD = 999911659;
ll n, g, p[5] = {0, 2, 3, 4679, 35617}, ans[5], fac[100000], ni[100000];
ll exgcd(ll a, ll b, ll & x, ll & y ){
if(!b) {
x = 1; y = 0;
return a;
}
ll t = exgcd(b, a % b, y, x);
y -= a / b * x;
return t;
}
ll getni(ll x, ll p) {
ll a, b;
exgcd(x, p, a, b);
(a += p) %= p;
return a;
}
ll lucas(ll a, ll b, ll p) {
if(a < b) return 0;
if(a < p) return fac[a] * ni[b] * ni[a - b] % p;
else return lucas(a % p, b % p, p) * lucas(a / p, b / p, p) % p;
}
void work(int x) {
memset(fac, 0, sizeof(fac));
memset(ni, 0, sizeof(ni));
fac[1] = fac[0] = ni[0] = ni[1] = 1;
for(int i = 2; i < p[x]; i++) fac[i] = fac[i - 1] * i % p[x];
for(int i = 2; i < p[x]; i++) ni[i] = (p[x] - p[x] / i) * ni[p[x] % i] % p[x];
for(int i = 2; i < p[x]; i++) (ni[i] *= ni[i - 1]) %= p[x];
ll i = 1ll;
for( ; i * i < n; i++) {
if(n % i == 0) {
ans[x] += lucas(n, i, p[x]);
//cout << ans[x] << endl;
ans[x] += lucas(n, n / i, p[x]);
//cout << ans[x] << endl;
ans[x] %= p[x];
//cout << ans[x] << endl;
}
}
if(i * i == n) ans[x] += lucas(n, i, p[x]);
//cout << ans[x] << endl;
//cout << endl;
ans[x] %= p[x];
}
ll CRT() {
ll M = MOD - 1;
ll rt = 0ll;
for(int i = 1; i <= 4; i++) {
rt += ans[i] * getni(M / p[i], p[i]) * (M / p[i]) % M;
}
//cout << rt << endl;
return rt % M;
}
ll quick_mod(ll a, ll k) {
ll ans = 1ll;
while(k) {
if(k & 1ll) (ans *= a) %= MOD;
(a *= a) %= MOD;
k >>= 1;
}
return ans;
}
int main() {
cin >> n >> g;
if(g == MOD) {printf("0\n");return 0;}
for(int i = 1; i <= 4; i++) {
work(i);
//cout << ans[i] << endl;
}
cout << quick_mod(g, CRT()) << endl;
return 0;
}

洛谷 [P2480] 古代猪文的更多相关文章

  1. 洛谷P2480 古代猪文

    这道题把我坑了好久...... 原因竟是CRT忘了取正数! 题意:求 指数太大了,首先用欧拉定理取模. 由于模数是质数所以不用加上phi(p) 然后发现phi(p)过大,不能lucas,但是它是个sq ...

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

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

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

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

  4. 【题解】古代猪文 [SDOI2010] [BZOJ1951] [P2480]

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

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

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

  6. P2480 [SDOI2010]古代猪文

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

  7. 【BZOJ1951】[SDOI2010]古代猪文

    [BZOJ1951][SDOI2010]古代猪文 题面 bzoj 洛谷 题解 题目实际上是要求 $ G^{\sum d|n\;C_n^d}\;mod \; 999911659 $ 而这个奇怪的模数实际 ...

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

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

  9. luogu_2480: 古代猪文

    洛谷:2480古代猪文 题意描述: 给定两个整数\(N,G\),求$G^{\sum_{k|n}C_n^k} mod 999911659 $. 数据范围: \(1\leq N\leq 10^9,1\le ...

随机推荐

  1. ubuntu k8s 命令补全

    apt install bash-completion // locate bash_completion source /usr/share/bash-completion/bash_complet ...

  2. IDEA安装及破解

    一.下载(IDEA 2019.1.2) 1.下载地址:https://www.jetbrains.com/idea/download/#section=windows 2.选择版本,并选择最终版(.e ...

  3. Maven各种常用架包配置文件,保存一份

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  4. 【Machine Learning is Fun!】1.The world’s easiest introduction to Machine Learning

    Bigger update: The content of this article is now available as a full-length video course that walks ...

  5. ERROR 1045 (28000): Access denied for user 'xxx'@'localhost' (using password: YES) MYSQL 新建用户 无法登录 问题解决方法

    使用mysql ,出现新建账户无法登录问题 查看 user列表中,有部分账户没有设置密码,将全部重新设置一遍密码,然后还是无法登录. 使用命令 update user set password=pas ...

  6. Robot Framework user guide

    http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html

  7. 如何使用jmeter做关联

    1.适用场景 从上一个接口的返回值中获取值传递给下一个接口使用 2.添加JSON Extractor 在需求提取的参数上添加--后置处理器--JSON Extractor 从登录接口的返回值中取use ...

  8. 示例vue 的keep-alive缓存功能的实现

    本篇文章主要介绍了vue 的keep-alive缓存功能的实现,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Vue 实现组件信息的缓存 当我们 ...

  9. Cinder配置多Ceph后端步骤

    1. 检查cinder当前backend配置 使用cinder service-list,查看cinder-volume服务的Host字段格式. 旧版格式: 新版格式: 旧版中Host字段是cinde ...

  10. 记一次虚拟机无法挂载volume的怪异问题排查

    故障现象 使用nova volume-attach <server> <volume>命令挂载卷,命令没有返回错误,但是查看虚拟机状态,卷并没有挂载上. 故障原因 疑似虚拟机长 ...