2875: [Noi2012]随机数生成器 - BZOJ
2014-06-17 18:58
357 查看
Description
Input
包含6个用空格分割的m,a,c,X0,n和g,其中a,c,X0是非负整数,m,n,g是正整数。
Output
输出一个数,即Xn mod g
Sample Input
11 8 7 1 5 3
Sample Output
2
快速幂+快速乘
View Code
Input
包含6个用空格分割的m,a,c,X0,n和g,其中a,c,X0是非负整数,m,n,g是正整数。
Output
输出一个数,即Xn mod g
Sample Input
11 8 7 1 5 3
Sample Output
2
快速幂+快速乘
type matrix=array[1..2,1..2]of int64; var a,c,p,x0,n,g:int64; x,y:matrix; function kc(x,y:int64):int64; begin if y=0 then exit(0); kc:=kc(x,y>>1); kc:=(kc+kc)mod p; if y and 1=1 then kc:=(kc+x)mod p; end; operator *(a,b:matrix)c:matrix; var i,j,k:longint; begin fillchar(c,sizeof(c),0); for i:=1 to 2 do for j:=1 to 2 do for k:=1 to 2 do c[i,k]:=(c[i,k]+kc(a[i,j],b[j,k]))mod p; end; procedure main; begin read(p,a,c,x0,n,g); x[1,1]:=1;x[2,2]:=1; y[1,1]:=a;y[2,1]:=c;y[2,2]:=1; while n>0 do begin if n and 1=1 then x:=x*y; y:=y*y; n:=n>>1; end; writeln((kc(x0,x[1,1])+x[2,1])mod p mod g); end; begin main; end.
View Code
相关文章推荐
- [BZOJ2875][NOI2012]随机数生成器(矩阵乘法)
- 【BZOJ 2875】[Noi2012]随机数生成器 矩阵乘法
- Bzoj 2875: [Noi2012]随机数生成器(矩阵乘法)
- BZOJ2875 [Noi2012]随机数生成器 【矩阵乘法 + 快速乘】
- [BZOJ 2875 & Vijos 1725] NOI 2012 随机数生成器 · 矩阵乘法+快速乘法
- 【BZOJ2875】[Noi2012]随机数生成器【矩阵快速幂】
- bzoj2875 [Noi2012]随机数生成器
- BZOJ 2875 2875: [NOI2012]随机数生成器
- bzoj2875 [Noi2012]随机数生成器 [矩阵+快乘]
- BZOJ2875 [Noi2012]随机数生成器
- BZOJ 2875[Noi2012]随机数生成器(矩阵快速幂+小技巧)
- BZOJ2875: [Noi2012]随机数生成器 矩阵乘法+快速乘
- bzoj 2875: [Noi2012]随机数生成器
- BZOJ 2875 [NOI2012] 随机数生成器
- bzoj2875: [Noi2012]随机数生成器 裸矩阵乘法
- BZOJ2875: [Noi2012]随机数生成器 矩阵乘法+快速乘
- [BZOJ 2875][NOI 2012]随机数生成器(矩阵快速幂)
- [BZOJ2875] [NOI2012] 随机数生成器 - 矩阵快速幂
- BZOJ 2875 NOI2012 随机数生成器 矩阵乘法
- [BZOJ2875]NOI2012随机数生成器|矩阵乘法