Xn数列
2024-08-30 21:58:56
题目描述 Description
给你6个数,m, a, c, x0, n, g
Xn+1 = ( aXn + c ) mod m,求Xn
m, a, c, x0, n, g<=10^18
输入描述 Input Description
一行六个数 m, a, c, x0, n, g
输出描述 Output Description
输出一个数 Xn mod g
#include<iostream>
using namespace std;
struct node{
long long v[][];
}t,tt;long long a,c,m,n,x,g;
long long quick_mult(long long a,long long b,long long mod)
{
long long re=;
while(a)
{
if(a&)re=(re+b)%mod;
b=(b+b)%mod;
a>>=;
}
return re;
}
node ju(node a,node b)
{
node re;
for(int i=;i<;i++)
for(int j=;j<;j++)
{
re.v[i][j]=;
for(int k=;k<;k++)
re.v[i][j]+=quick_mult(a.v[i][k],b.v[k][j],m);
re.v[i][j]%=m;
}
return re;
}
long long ans()
{
node re=tt,r=t;
while(n)
{
if(n&)re=ju(re,r);
r=ju(r,r);
n>>=;
}
return re.v[][]%g;
}
int main()
{
scanf("%lld%lld%lld%lld%lld%lld",&m,&a,&c,&x,&n,&g);
t.v[][]=a%m;
t.v[][]=;
t.v[][]=c%m;
t.v[][]=;
tt.v[][]=x%m;
tt.v[][]=;
tt.v[][]=;
tt.v[][]=;
cout<<ans()<<endl;
return ;
}
这个题目用到的内容 矩阵乘法 快速幂 快速乘
矩阵乘法 略
快速幂
使用二进制进行多次乘 几倍底数 减少运算量
int pow4(int a,int b){
int r=1,base=a;
while(b){
if(b&1) r*=base;
base*=base;
b>>=1;
}
return r;
}
快速乘和快速幂差不多的结构 用来解决 2个longlong型整数相乘取余的问题
如果两个longlong类型的整数直接相乘可能会溢出
使用加法一边加一遍取余则会减小溢出的可能
采用和快速幂一样的方法 快速处理并取余
long long quick_mult(long long a,long long b,long long mod)
快速乘和快速幂差不多的结构 用来解决 2个longlong型整数相乘取余的问题
如果两个longlong类型的整数直接相乘可能会溢出
使用加法一边加一遍取余则会减小溢出的可能
采用和快速幂一样的方法 快速处理并取余
long long quick_mult(long long a,long long b,long long mod)
{
long long re=0;
while(a)
{
if(a&1)re=(re+b)%mod;
b=(b+b)%mod;
a>>=1;
}
return re;
}
最新文章
- 阅读笔记 火球UML大战需求分析3
- MFC编程入门之二十(常用控件:静态文本框)
- Ubuntu 下配置Ganglia监控
- Druid 数据库连接池监控配置(web项目)
- Android-- FragmentStatePagerAdapter分页(转载)
- nginx:配置详细说明
- angularJS项目-ajax事件的按钮loading和页面loading状态 &; Controller之间通信-待续
- 机顶盒Demux
- HTML5给我们带来了什么?
- 一种协程的 C/C++ 实现
- Xamarin devexpress Grid
- Android开发环境的搭建之(四)虚拟设备AVD的基本配置
- vmware虚拟机上linux操作系统进行tty1~tty6切换方法和具体步骤
- Google是不是真的不能用了?非常奇怪的问题
- FLAnimatedImageView处理gif过程
- SPOJ Highways [矩阵树定理]
- pandas,读取或存储DataFrames的数据到mysql中
- elementUI 设置input的只读或禁用
- Django项目——CRM
- mysql数据库解决中文乱码的问题