BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)
Description
Input
Output
Sample Input
Sample Output
HINT
10%的数据中,1 <= N <= 50;
20%的数据中,1 <= N <= 1000;
40%的数据中,1 <= N <= 100000;
100%的数据中,1 <= G <= 1000000000,1 <= N <= 1000000000。
数论好题。因为用的东西太TM多了
首先可以明确题目让我们求解的式子为$G^{\sum_{d|n} C_n^d}~mod~p$
因为p是质数,所以根据费马小定理可得
$\begin{aligned} \displaystyle ans &= G^{\sum_{d|n} C_n^d}~mod~p \\ &=G^{\sum_{d|n} C_n^d~mod~(p-1)}~mod~p \end{aligned}$
所以我们现在不需要管G了,只需要把指数求出来就好了。
然而$p-1$并不是一个质数,该怎么用Lucas求解呢?
我们可以将$p-1$质因数分解,成$2,3,4679,35617$,然后对这四个质因数分别Lucas,然后把这四个列成一个同余方程组CRT解出来即可。
exLucas应该也是可以的不过我还没学会
注意特判G=p的情况
#include<iostream>
#include<cstring>
#include<cstdio>
#define N (100000)
#define MOD (999911659)
using namespace std; long long m[]={,,,,};
long long n,g,a[N];
long long fac[N],inv[N],facInv[N]; long long C(long long n,long long m,long long p)
{
if (m>n) return ;
return fac[n]*facInv[m]%p*facInv[n-m]%p;
} long long Lucas(long long n,long long m,long long p)
{
if (n<m) return ;
long long sum=;
for (; m; n/=p,m/=p)
sum=sum*C(n%p,m%p,p)%p;
return sum;
} void Init(long long p)
{
inv[]=; fac[]=facInv[]=;
for (int i=; i<=p; ++i)
{
if (i!=) inv[i]=(p-p/i)*inv[p%i]%p;
fac[i]=fac[i-]*i%p;
facInv[i]=facInv[i-]*inv[i]%p;
}
} void exgcd(long long a,long long b,long long &d,long long &x,long long &y)
{
if (!b){d=a; x=; y=; return;}
exgcd(b,a%b,d,y,x); y-=x*(a/b);
} long long CRT()
{
long long M=m[],A=a[],d,x,y,t;
for (int i=; i<=; ++i)
{
exgcd(M,m[i],d,x,y);
if ((a[i]-A)%d) return -;
x*=(a[i]-A)/d; t=m[i]/d; x=(x%t+t)%t;
A=M*x+A; M=M/d*m[i]; A%=M;
}
A=(A%M+M)%M;
return A;
} long long Qpow(long long a,long long b,long long p)
{
long long ans=,base=a;
while (b!=)
{
if (b&!=)
ans=(ans*base)%p;
base=(base*base)%p;
b>>=;
}
return ans;
} int main()
{
scanf("%lld%lld",&n,&g);
if (g==MOD)
{
printf("");
return ;
}
for (int i=; i<=; ++i)
{
Init(m[i]);
for (int j=; j*j<=n; ++j)
{
if (n%j) continue;
(a[i]+=Lucas(n,j,m[i]))%=m[i];
if (j*j==n) continue;
(a[i]+=Lucas(n,n/j,m[i]))%=m[i];
}
}
printf("%lld",Qpow(g,CRT(),MOD));
}
BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)的更多相关文章
- P2480 [SDOI2010]古代猪文 Lucas+CRT合并
\(\color{#0066ff}{ 题目描述 }\) 猪王国的文明源远流长,博大精深. iPig在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为N.当然,一种语言如果字数很多,字典也相应会 ...
- 【BZOJ1951】古代猪文(CRT,卢卡斯定理)
[BZOJ1951]古代猪文(CRT,卢卡斯定理) 题面 BZOJ 洛谷 题解 要求什么很显然吧... \[Ans=G^{\sum_{k|N}{C_N^k}}\] 给定的模数是一个质数,要求解的东西相 ...
- 【BZOJ1951】[Sdoi2010]古代猪文 Lucas定理+CRT
[BZOJ1951][Sdoi2010]古代猪文 Description 求$X=\sum\limits_{d|n}C_n^d$,$Ans=G^X (\mod 999911659)$. Input 有 ...
- BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]
1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2194 Solved: 919[Submit][Status] ...
- [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】
题目 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那 ...
- BZOJ1951[SDOI2010]古代猪文
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- bzoj千题计划323:bzoj1951: [Sdoi2010]古代猪文(Lucas+CRT+欧拉定理)
https://www.lydsy.com/JudgeOnline/problem.php?id=1951 先欧拉降幂 然后模数质因数分解 分别计算组合数的结果,中国剩余定理合并 #include&l ...
- BZOJ1951 [Sdoi2010]古代猪文 中国剩余定理 快速幂 数论
原文链接http://www.cnblogs.com/zhouzhendong/p/8109156.html 题目传送门 - BZOJ1951 题意概括 求 GM mod 999911659 M=∑i ...
随机推荐
- spring利用cors处理跨域问题
参考 http://blog.csdn.net/isea533/article/details/50449907 写的很全面 http://blog.csdn.net/a317560315/artic ...
- GreenPlum 大数据平台--运维(一)
.最后分析或真空或创建表或等... Select * from pg_stat_operations where schemaname='SCHEMA NAME ' and actionname in ...
- Ubuntu 12.04 搭建 SAMBA-SWAT(Samba Web 管理工具)
参考了:http://linux.chinaunix.net/techdoc/net/2007/03/14/952274.shtml,对其进行了部分修改完善. 依次执行 1.sudo apt-get ...
- (转) Linux Shell经典实例解析
原文:http://blog.csdn.net/yonggeit/article/details/72779955 该篇博客作为对之前Linux Shell常用技巧和高级技巧系列博客的总结,将以Ora ...
- 【STM32学习笔记】STM32f407 使用4*4矩阵键盘
作者:李剀 出处:https://www.cnblogs.com/kevin-nancy/ 欢迎转载,但也请保留上面这段声明.谢谢! 写在前面: 这是本人第一次开始写博客,可能写的不是很好,也请大家谅 ...
- MongoDB的聚合函数 Aggregate
Aggregate的使用,有利于我们对MongoDB中的集合进行进一步的拆分. 示例: db.collection.aggregate( {$match:{x:1}, {limit:10}, {$gr ...
- 阻止事件的默认行为,例如click <a>后的跳转~
在W3C中,使用preventDefault()方法: 在IE中,使用window.event.returnValue = false.
- Java循环结构之while和do-while循环
循环结构知识点 本章技能目标 1理解循环的含义 2会使用while循环 3会使用do-while循环 4会使用调试解决简单的程序错误 一. 循环的含义 循环就是重复的做……(Java程序中的循环结 ...
- Linux 网络(连接)相关参数作用
参考: [1] http://bbs.chinaunix.net/thread-2318039-1-1.html Backlog net.core.netdev_max_backlog = 1000 ...
- jQuery二——属性操作、文档操作、位置属性
一.jquery的属性操作 jquery对象有它自己的属性和方法. 其中jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作. 1.html属性操作 是对htm ...