bzoj 1951 lucas crt 费马小定理
首先假设输入的是n,m
我们就是要求m^(Σ(c(n,i) i|n)) mod p
那么根据费马小定理,上式等于
m^(Σ(c(n,i) i|n) mod (p-1)) mod p
那么问题的关键就是求 Σ(c(n,i) i|n) mod (p-1)了
那么如果P是素数的话,我们可以用lucas定理来快速求出来组合数,这道题的p-1是
非素数,那么我们分解质因数pi,假设c(n,i) i|n为X,那我们求出来X mod pi=ai,这个是
符合lucas定理的,那么我们可以得到质因子数个式子(本题有4个质因子),然后我们用
中国剩余定理合并这4个式子就行了
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/
//By BLADEVIL
const
d39 =;
pp :array[..] of longint=(,,,);
var
n, m, k :int64;
cc :int64;
a :array[..] of int64;
i :longint;
fac :array[..] of int64;
function ex_gcd(a,b:int64):int64;
var
z :int64;
begin
if b= then
begin
ex_gcd:=;
cc:=;
exit;
end else
begin
z:=ex_gcd(b,a mod b);
ex_gcd:=cc;
cc:=z-(a div b)*cc;
end;
end;
function gcd(a,p:int64):int64;
begin
gcd:=ex_gcd(a,p);
gcd:=(gcd mod p+p) mod p;
end;
function combine(a,b,p:int64):int64;
var
ans1, ans2 :int64;
i :longint;
begin
ans1:=fac[a] mod p;
ans2:=(fac[a-b]*fac[b]) mod p;
ans2:=gcd(ans2,p);
combine:=ans1*ans2 mod p;
end;
function lucas(x,y,p:int64):int64;
var
a, b :int64;
begin
if y= then exit();
a:=x mod p;
b:=y mod p;
if a<b then exit() else lucas:=lucas(x div p,y div p,p)*combine(a,b,p);
end;
function crt:int64;
var
i :longint;
begin
crt:=;
for i:= to do
crt:=(crt+a[i]*((d39-) div pp[i])*gcd((d39-) div pp[i],pp[i])) mod (d39-);
end;
function get(x:int64):int64;
var
i, j :longint;
begin
for i:= to trunc(sqrt(x)) do
begin
if x mod i= then
begin
for j:= to do
begin
a[j]:=(a[j]+lucas(x,i,pp[j])) mod pp[j];
if x div i<>i then a[j]:=(a[j]+lucas(x,x div i,pp[j])) mod pp[j];
end;
end;
end;
get:=crt;
end;
function mi(n,k,p:int64):int64;
var
sum :int64;
begin
mi:=;
sum:=n;
while k<> do
begin
if k mod = then mi:=mi*sum mod p;
sum:=sum*sum mod p;
k:=k div ;
end;
end;
begin
fac[]:=;
for i:= to pp[] do fac[i]:=fac[i-]*int64(i) mod (d39-);
read(n,m);
if m mod d39= then
begin
writeln();
halt;
end;
k:=get(n);
writeln(mi(m,k,d39));
end.
bzoj 1951 lucas crt 费马小定理的更多相关文章
- BZOJ.1951.[SDOI2010]古代猪文(费马小定理 Lucas CRT)
题目链接 \(Description\) 给定N,G,求\[G^{\sum_{k|N}C_n^k}\mod\ 999911659\] \(Solution\) 由费马小定理,可以先对次数化简,即求\( ...
- [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- 【BZOJ1951】【SDOI2010】古代猪文 Lucas定理、中国剩余定理、exgcd、费马小定理
Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...
- [CodeVs1515]跳(lucas定理+费马小定理)
嘿嘿嘿好久没写数学题了,偶尔看到一道写一写... 题目大意:一个(n+1)*(m+1)[0<=n, m<=10^12,n*m<=10^12]的矩阵,C(0,0)=1,C(x,y)=C ...
- 【bzoj1951】[Sdoi2010]古代猪文 费马小定理+Lucas定理+中国剩余定理
题目描述 求 $g^{\sum\limits_{k|n}C_{n}^{\frac nk}}\mod 999911659$ 输入 有且仅有一行:两个数N.G,用一个空格分开. 输出 有且仅有一行:一个 ...
- hdu 3037 费马小定理+逆元除法取模+Lucas定理
组合数学推推推最后,推得要求C(n+m,m)%p 其中n,m小于10^9,p小于1^5 用Lucas定理求(Lucas定理求nm较大时的组合数) 因为p数据较小可以直接阶乘打表求逆元 求逆元时,由费马 ...
- BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)
3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 123 Solved: 73 [ Submit][ St ...
- 【BZOJ】3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(排列组合+乘法逆元+欧拉定理/费马小定理)
http://www.lydsy.com/JudgeOnline/problem.php?id=3398 以下牡牛为a,牝牛为b. 学完排列计数后试着来写这题,“至少”一词可以给我们提示,我们可以枚举 ...
- BZOJ 3240 [Noi2013]矩阵游戏 ——费马小定理 快速幂
发现是一个快速幂,然而过不去. 怎么办呢? 1.十进制快速幂,可以用来练习卡时. 2.费马小定理,如果需要乘方的地方,可以先%(p-1)再计算,其他地方需要%p,所以需要保存两个数. 然后就是分类讨论 ...
随机推荐
- 云计算之路-阿里云上:“黑色1秒”问题与2009年Xen一个补丁的故事
在之前对“黑色1秒”问题的分析博文中,我们将最大嫌疑对象锁定在了Xen,在这篇博文我们将从Xen的角度进行分析.也许有人会问,为什么不知道天多高地多厚地去研究不属于自己范围的问题?只因我们对一个问题的 ...
- 【APUE】Chapter15 Interprocess Communication
15.1 Introduction 这部分太多概念我不了解.只看懂了最后一段,进程间通信(IPC)内容被组织成了三个部分: (1)classical IPC : pipes, FIFOs, messa ...
- 「题目代码」P1029~P1033(Java)
1029 C基础-求解方程 import java.util.*; import java.io.*; import java.math.BigInteger; public class Main { ...
- JMeter上传图片
JMeter怎样上传图片? 请注意图片的路径要与.jmx脚本的目录保持一致, 或者放在JMeter的bin目录下. 协议:http 服务器名称或IP:www.abcdef.com 方法:POST 路径 ...
- java.sql.Date java.sql.Time java.sql.Timestamp 之比较
java.sql.Date,java.sql.Time和java.sql.Timestamp 三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.D ...
- NLP系列-中文分词(基于词典)
中文分词概述 词是最小的能够独立活动的有意义的语言成分,一般分词是自然语言处理的第一项核心技术.英文中每个句子都将词用空格或标点符号分隔开来,而在中文中很难对词的边界进行界定,难以将词划分出来.在汉语 ...
- MFC MDI 工程禁用win7任务栏(taskbar)多视图缩略图(preview)功能
花费了好几天,google上的把搜索关键字都想烂了终于搜出了答案 app的init函数中在创建mainframe之前调用 EnableTaskbarInteraction(FALSE);
- XML序列化器读取XML数据
PS:标题我还真的不知道该怎么取比较好,大家将就下吧^_^ 场景:上周接到一个任务,要求我把ASP写的会员充值功能,用ASP.NET复制一遍,没有给我需求文档,就是让我根据代码去分析业务逻辑,然后看到 ...
- libevent 多线程
对于evbuffer,如果libevent使用了evthread_use_pthreads();那么所有的单个evbuffer操作就已经是原子的了,调用操作相关的接口进去就上锁,出来解锁,那么 evb ...
- PokeCats开发者日志(四)
现在是PokeCats游戏开发的第八天的上午,感觉游戏做得差不多了,来写一下开发者日志吧! (1)增加闯关模式,一共30关. (2)更改了最后一关的主题,更换了背景,将树桩改为礼物盒. ...