博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 [P2480] 古代猪文
阅读量:4935 次
发布时间:2019-06-11

本文共 2089 字,大约阅读时间需要 6 分钟。

卢卡斯定理

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

#include 
#include
#include
#include
#include
#define ll long longusing 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;}

转载于:https://www.cnblogs.com/Mr-WolframsMgcBox/p/8637077.html

你可能感兴趣的文章
Vuejs vm对象详解
查看>>
自定义RatingBar的一个问题(只显示显示一个星星)
查看>>
剑指Offer--二叉树的镜像
查看>>
PAT-BASIC-1031-查验身份证
查看>>
Python笔记5----集合set
查看>>
连连看小游戏
查看>>
js二级联动
查看>>
谜题32:循环者的诅咒
查看>>
RMI
查看>>
动态切换多数据源的配置
查看>>
win7电脑调整分区后分区不见的文件寻回法子
查看>>
《第一行代码》学习笔记2-Android开发特色
查看>>
bzoj3396 [Usaco2009 Jan]Total flow 水流
查看>>
20165231 2017-2018-2 《Java程序设计》第3周学习总结
查看>>
(180905)如何通过梯度下降法降低损失----Google机器学习速成课程笔记
查看>>
(响应式PC端媒体查询)电脑屏幕分辨率尺寸大全
查看>>
Crystal Reports拉报表报错:Error detected by database DLL
查看>>
Java获取新浪微博cookies
查看>>
面试题总结
查看>>
【BZOJ1095】捉迷藏(动态点分治)
查看>>