CODEVS1281 Xn数列 (矩阵乘法+快速乘)
2024-08-30 21:58:56
真是道坑题,数据范围如此大。
首先构造矩阵 [ f[0] , 1] * [ a,0 ] ^n= [ f[n],1 ]
[ c,1 ]
注意到m, a, c, x0, n, g<=10^18,所以要有类似于二进制分解的方法进行快速乘,防止爆范围。
Program CODEVS1281;
type arr=array[..,..] of int64;
Program CODEVS1281;
var a,b:arr;
m,k1,k2,x0,n,mo,p:int64;
function quick(x,y:int64):int64;
var ans:int64;
begin
ans:=;
while y> do
begin
if y mod = then ans:=(ans+x) mod m;
y:=y div ;
x:=x* mod m;
end;
exit(ans);
end;
operator *(a,b:arr) c:arr;
var i,j,k:longint;
sum:int64;
begin
fillchar(c,sizeof(c),);
for i:= to do
for j:= to do
begin
sum:=;
for k:= to do
sum:=(sum+quick(a[i,k],b[k,j]))mod m;
c[i,j]:=sum;
end;
exit(c);
end;
begin
readln(m,k1,k2,x0,n,mo);
a[,]:=; a[,]:=; a[,]:=; a[,]:=;
b[,]:=k1; b[,]:=; b[,]:=k2; b[,]:=;
while n> do
begin
if n mod = then a:=a*b;
n:=n div ;
b:=b*b;
end;
writeln((quick(x0,a[,])+a[,]) mod m mod mo); end.
最新文章
- ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 K. King’s Rout
- Android Studio开发第四篇版本管理Git(下)
- c# 文件另存为代码
- Linux下建立Nexus私服
- C内存分配函数
- Android中由IP地址查询经纬度坐标的实例
- IOS MVC
- Kruskal-Wallis Test and Friedman test
- PHP设置session多级路径并定期自动清理
- 文字在div中居中
- 三种计算c#程序运行时间的方法
- Sublime text3 代码格式化插件
- 使用document.execCommand复制内容至剪贴板
- Bootstrap3基础 栅格系统 标尺(col-lg/md/sm/xs-1)
- s21day07 python笔记
- ModelForm的使用
- DL_WITH_PY系统学习(第2章)
- Java中的容器 I————浅谈List
- ubuntu忘记root密码 的解决方法
- ‘ActiveX component can’t create object解决方法
热门文章
- bzoj1477 &;&; exgcd学习笔记
- Mariadb-lib
- 如何使jquery性能最佳
- [Swift通天遁地]四、网络和线程-(10)处理图片:压缩、缩放、圆角、CoreImage滤镜、缓存
- leetCode----day01---- 从排序数组中删除重复项
- [hihocoder][Offer收割]编程练习赛57
- 3分钟看懂flex布局
- 编写高质量的js之恰当选用if和switch
- 【转】npm 是干什么的
- HDU_1026_Ignatius and the Princess I_BFS(保存路径)