题目描述 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

样例输入 Sample Input

11 8 7 1 5 3

样例输出 Sample Output

2

  很久没有写博客了……先写道水题压压惊

  由于不想写矩乘(不要问我为什么),所以我就开始了推式子(其实就是想当做数学题来做)。

  首先,由于$x_i=ax_{i-1}+c$,那么$x_n={a^nx_0+\sum_{i=0}^{n-1}a^ic}$

  那么,写个快速幂,前面一部分就出来了。再设$f_x=\sum_{i=0}^{x}a^i$,$y=\lfloor x/2 \rfloor$,那么有:

$$ f_x= \begin{cases} (a^{y+1}+1)f_{y} &(x \bmod 2=1) \\ f_{x-1}+a^x&(x \bmod 2=0) \end{cases} $$

  最后,由于模数是$10^{18}$级别的,还要写个快速乘法。

  下面贴代码(好像一不小心多写了若干个$\log$):

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout) using namespace std;
typedef long long llg; llg m,a,c,x0,g,n,ans; void gi(llg &h){if(h>=m) h%=m;}
llg ch(llg a,llg b){
llg s=;
if(a<b) swap(a,b);
while(b){
if(b&) s+=a,gi(s);
a<<=,gi(a); b>>=;
}
return s;
} llg mi(llg a,llg b){
llg s=;
while(b){
if(b&) s=ch(s,a);
a=ch(a,a); b>>=;
}
return s;
} llg solve(llg x){
if(!x) return ;
llg s,u=(x-)>>;
s=ch(solve(u),mi(a,u+)+);
if(!(x&)) s+=mi(a,x),gi(s);
return s;
} int main(){
scanf("%lld %lld %lld %lld %lld %lld",&m,&a,&c,&x0,&n,&g);
ans=ch(mi(a,n),x0);
ans+=ch(solve(n-),c); gi(ans);
printf("%lld",ans%g);
return ;
}

codevs 1281 Xn数列的更多相关文章

  1. codevs 1281 Xn数列 (矩阵乘法)

    /* 再来个题练练手 scanf longlong 有bug....... */ #include<cstdio> #include<iostream> #include< ...

  2. [WikiOI "天梯"1281] Xn数列

    题目描述Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入描 ...

  3. Codevs No.1281 Xn数列

    2016-06-01 16:28:25 题目链接: Xn数列 (Codevs No.1281) 题目大意: 给定一种递推式为 Xn=(A*Xn-1+C)%M 的数列,求特定的某一项%G 解法: 矩阵乘 ...

  4. 【CODEVS】1281 Xn数列

    [算法]矩阵快速幂 [题解]T*A(n-1)=A(n)矩阵如下: a 1 * x(n-1) 0 = xn 0 0 1    c        0    c   0 防止溢出可以用类似快速幂的快速乘. ...

  5. 【wikioi】1281 Xn数列(矩阵乘法)

    http://wikioi.com/problem/1281/ 矩阵真是个神奇的东西.. 只要搞出一个矩阵乘法,那么递推式可以完美的用上快速幂,然后使复杂度降到log 真是神奇. 在本题中,应该很快能 ...

  6. C++之路进阶——codevs1281(Xn数列)

    1281 Xn数列  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master       题目描述 Description 给你6个数,m, a, c, x0, n, ...

  7. 矩阵乘法快速幂 codevs 1250 Fibonacci数列

    codevs 1250 Fibonacci数列  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 定义:f0=f1=1 ...

  8. Xn数列(codevs 1281)

    题目描述 Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入 ...

  9. 矩阵乘法快速幂 codevs 1732 Fibonacci数列 2

    1732 Fibonacci数列 2  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 在“ ...

随机推荐

  1. 安卓开发NDK环境搭建

    第一步preferences - android - NDK 第二步 输入ndk文件所在目录 第三步 创建文件名(右击项目,阿 androidtool - add native sppuort)

  2. android环境搭建

    Android开发环境的两种安装方式:JDK+Eclipse+ADT直接下载集成的开发工具,解压即可用.下载地址:http://pan.baidu.com/s/1dD3s3bN ,不管采用哪种安装方式 ...

  3. PHP导出数据库方法

    (1)定义一个db_dump函数如下: <?PHP function db_dump($host,$user,$pwd,$db) { $mysqlconlink = mysql_connect( ...

  4. (翻译) TFS源代码控制的未来 (TFSVC vs. Git)

    说明:由于博客园的限制,之前转发的MVP卢建晖的文章不能放入首页,但我会继续转发,感兴趣的同学请到我的博客首页查看. 博主: 翻译自微软Visual Studio ALM产品组老大Brian Harr ...

  5. dynamic-load-apk插件原理整理

    因为当前项目功能越来越多,编译速度越来越慢(公司电脑配置也挺差的...),并且方法数已超出65535的限制了,虽然通过multidex暂时解决了,但是这并不是一个好的解决方式.所以通过插件来加快编译速 ...

  6. Virtual Box 杂记

    1. Virtual Box后台运行 a. VBoxManage startvm yourvmname --type headlessb. VBoxHeadless --startvm yourvmn ...

  7. easy ui 1.4的NumberBox,失去焦点后不能再次输入小数点

    这也是1.4版本的bug,现在1.4.1也发布了,经验证,该问题在新版本中已经解决了 在网上找到的解决办法,地址:http://www.jeasyui.com/forum/index.php?topi ...

  8. [Linux 性能检测工具]SAR

    SAR NAME: SAR报告,收集,保存系统活动信息 语法: sar  [ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -i interval ] [ -m ...

  9. linux mysql 常用

    mysql -uroot -p输入密码进入 use database;使用指定的数据库 show tables;显示存在的表:describe 表名; source 目标文件.sql; 可以执行指定的 ...

  10. Fatal error: Call-time pass-by-reference has been removed

    下面的代码报错:Fatal error: Call-time pass-by-reference has been removed function myFunc($arg) { do somethi ...