【题目大意】

已知Xn+1=(aXn+c) mod m,求Xn mod g。

【思路】

get到了longlong乘法的正确方法,快速乘。什么是快速乘呢?

简单来讲,快速幂就是模拟了二进制的竖式乘法。如:

10101 × 1011 = 10101*1+10101*2^1*1+10101*2^2*0+10101*2^3*1

代码如下:

long long multi(long long a,long long b,long long m) {
long long ans=; while(b) {
if(b&) (ans+=a) %= m;
(a=a*) %= m;
b/=;
} return ans;
}

接下来本题的方法就是据矩阵乘法的快速幂

(a 0

c 1)自乘n次即可

注意函数里也不要忘记了开longlong..一开始我函数里面的n写成了int,WA了一发。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll matrix[][],ans_matrix[][];
ll m,n,a,c,g,x0; ll ksc(ll a,ll b)
{
ll ans=;
while (b)
{
if (b&) ans=(ans+a)%m;
a=(a<<)%m;
b>>=;
}
return ans;
} void ksm(ll n)
{
ans_matrix[][]=ans_matrix[][]=;
ans_matrix[][]=ans_matrix[][]=;
while (n)
{
if (n&)
{
ans_matrix[][]=ksc(ans_matrix[][],matrix[][]);
ans_matrix[][]=(ksc(ans_matrix[][],matrix[][])+matrix[][])%m;
}
n>>=;
ll tmp1=ksc(matrix[][],matrix[][]);
ll tmp2=(ksc(matrix[][],matrix[][])+matrix[][])%m;
matrix[][]=tmp1,matrix[][]=tmp2;
}
} void init()
{
scanf("%lld%lld%lld%lld%lld%lld",&m,&a,&c,&x0,&n,&g);
matrix[][]=a%m,matrix[][]=,matrix[][]=c%m,matrix[][]=;
} void get_ans()
{
ll ans=(ksc(ans_matrix[][],x0)+ans_matrix[][])%m;
ans%=g;
printf("%lld",ans);
} int main()
{
//freopen("randoma.in","r",stdin);
//freopen("randoma.out","w",stdout);
init();
ksm(n);
get_ans();
return ;
}

【矩阵乘法+快速乘】BZOJ2875-[NOI2012]随机数生成器的更多相关文章

  1. BZOJ2875 [Noi2012]随机数生成器 【矩阵乘法 + 快速乘】

    题目 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me thod)来生成一个随机数列,这种方法需要设置四个非负整数参数m,a, ...

  2. bzoj2875: [Noi2012]随机数生成器

    矩阵乘法. x[n] = {x[0],1} * ( {a,0} ^ n ) {b,1} 写成这样谁能看懂.... noi里的大水题.我居然 #include<cstdio> #includ ...

  3. [日常摸鱼]bzoj2875[NOI2012]随机数生成器-矩阵快速幂

    好裸的矩阵快速幂-然而我一开始居然构造不出矩阵- 平常两个的情况都是拿相邻两项放在矩阵里拿去递推的-然后我就一直构造不出来-其实把矩阵下面弄成1就好了啊orz #include<cstdio&g ...

  4. BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘

    题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...

  5. 矩阵(快速幂):COGS 963. [NOI2012] 随机数生成器

    963. [NOI2012] 随机数生成器 ★★   输入文件:randoma.in   输出文件:randoma.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 栋 ...

  6. 【BZOJ2875】随机数生成器(矩阵快速幂)

    [BZOJ2875]随机数生成器(矩阵快速幂) 题面 Description 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me ...

  7. [NOI2012]随机数生成器【矩阵快速幂】

    NOI2012 随机数生成器 题目描述 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法 ...

  8. BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )

    矩阵快速幂...+快速乘就OK了 ----------------------------------------------------------------------------------- ...

  9. Bzoj 2875: [Noi2012]随机数生成器(矩阵乘法)

    2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2052 Solved: 1118 Description ...

随机推荐

  1. 迅雷Bolt的ClipSubBindBitmap函数特别说明

    因为在工作中基于迅雷Bolt开发的是IM产品,需要实现自定义用户头像的功能. 但Bolt中对图像的默认拉伸锯齿效果非常明显,所以自己实现了图像拉伸函数,代码已共享,具体可查看:<迅雷Bolt图像 ...

  2. MyBatis的SQL语句映射文件详解(二)----增删改查

    1.select语句 public List<User> findUser() {  // TODO Auto-generated method stub    List users= ( ...

  3. salt-api的使用

    curl -k https://192.168.74.129:8006/ -H "Accept: application/x-yaml" -H "X-Auth-Token ...

  4. phpAdmin 修改密码后拒绝登陆

    phpMyadmin没配置正确,打开 phpMyadmin 目录找到config.inc.php文件,查找到$cfg['Servers'][$i]['password']='';这行,在''中输入你正 ...

  5. finally return 执行顺序问题

    网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下fina ...

  6. LCD实验学习笔记(三):WATCH DOG

    看门狗是为了能够防止程序跑飞用的.程序应该定时的去喂狗.如果程序跑飞了,那么就不会去喂狗了.如果超过了喂狗的时间,那么狗就会生成一个信号来reset CPU.一般程序不需要,特殊情况下需要这种机制. ...

  7. LeetCode 2 :Swap Nodes in Pairs

    我的代码是这样的: class Solution { public: ListNode *swapPairs(ListNode *head) { ; ; ListNode *listA; ListNo ...

  8. HTTP===返回结果的HTTP状态码

    HTTP 状态码负责表示客户端 HTTP 请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作. 1.状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务器端发送请求时,描述返 ...

  9. php性能调试工具介绍

    php版本:php7 xhprof: xhprof是php5.*下很好的性能测试工具,配合xhprof_html能够图形显示测试结果,基本够用, 但已经没人维护了. tideways: 在php7下, ...

  10. mybatis插入值的时候返回对象的主键值

    mapping文件: <insert id="insert" parameterType="com.vimtech.bms.business.riskproject ...