C++之路进阶——codevs1281(Xn数列)
1281 Xn数列
给你6个数,m, a, c, x0, n, g
Xn+1 = ( aXn + c ) mod m,求Xn
m, a, c, x0, n, g<=10^18
一行六个数 m, a, c, x0, n, g
输出一个数 Xn mod g
11 8 7 1 5 3
2
int64按位相乘可以不要用高精度。
题解:
1.俄罗斯农夫算法。
2.矩阵 {(a,0)(1,1)},{Xn,c}
3.要用快速幂。
代码:
#include<cstdio>
#include<iostream>
#define ll long long using namespace std; long long m,a,c,x0,n,g;
long long x[][],b[][],f[][]; long long mull(long long a,long long b,long long m)
{
long long ans=;
while (b)
{
if (b&) ans=(a+ans)%m;
b>>=;
a=(a<<)%m;
}
return ans;
} int mull1 (long long a[][],long long b[][],long long ans[][])
{
long long c[][];
for (int i=;i<;i++)
for (int j=;j<;j++)
{
c[i][j]=;
for (int k=;k<;k++)
c[i][j]=(c[i][j]+mull(a[i][k],b[k][j],m))%m;
}
for (int i=;i<;i++)
for (int j=;j<;j++)
ans[i][j]=c[i][j];
} int mull2 (long long a[][],long long b[][],long long ans[][])
{
long long c[][];
for (int i=;i<;i++)
for (int j=;j<;j++)
{
c[i][j]=;
for (int k=;k<;k++)
c[i][j]=(c[i][j]+mull(a[i][k],b[k][j],m))%m;
}
for (int i=;i<;i++)
ans[][i]=c[][i];
} int main()
{
scanf("%lld%lld%lld%lld%lld%lld",&m,&a,&c,&x0,&n,&g);
x[][]=a;
x[][]=x[][]=;
b[][]=b[][]=;
f[][]=x0;f[][]=c;
while (n)
{
if (n&) mull1(x,b,b);
mull1(x,x,x);
n>>=;
}
mull2(f,b,f);
printf("%lld\n",f[][]%g);
return ;
}
C++之路进阶——codevs1281(Xn数列)的更多相关文章
- codevs1281 Xn数列
题目描述 Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入 ...
- CODEVS1281 Xn数列 (矩阵乘法+快速乘)
真是道坑题,数据范围如此大. 首先构造矩阵 [ f[0] , 1] * [ a,0 ] ^n= [ f[n],1 ] [ c,1 ] 注意到m, a, c, x0, n, g<=10^18,所以 ...
- Codevs No.1281 Xn数列
2016-06-01 16:28:25 题目链接: Xn数列 (Codevs No.1281) 题目大意: 给定一种递推式为 Xn=(A*Xn-1+C)%M 的数列,求特定的某一项%G 解法: 矩阵乘 ...
- [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 输入描 ...
- C++之路进阶codevs1269(匈牙利游戏)
1269 匈牙利游戏 2012年CCC加拿大高中生信息学奥赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description ...
- codevs 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 输入 ...
- 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 输入 ...
- C++之路进阶——codevs2492(上帝造题的七分钟 2)
2492 上帝造题的七分钟 2 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description XLk觉得<上帝造题的七分钟&g ...
- 【wikioi】1281 Xn数列(矩阵乘法)
http://wikioi.com/problem/1281/ 矩阵真是个神奇的东西.. 只要搞出一个矩阵乘法,那么递推式可以完美的用上快速幂,然后使复杂度降到log 真是神奇. 在本题中,应该很快能 ...
随机推荐
- mysql 存储过程,搞死人的语法
MySQL 真心不如sqlserver灵活 存储过程注意事项: 1.declare 依次声明 DECLARE MyAccountID VARCHAR (36); DECLARE Balance DEC ...
- 应对Memcached缓存失效,导致高并发查询DB的四种思路(l转)
当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升. 这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询. 解决 ...
- 【转】在C#中使用SendMessage
SendMessage是一个在user32.dll中声明的API函数,在C#中导入如下: using System.Runtime.InteropServices; [DllImport(" ...
- java读取邮件
package com.zz.mail; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
- Introduction of Team Member
1. 姓名:xx 性别:男 出生日期:1993.04.16 班级:110616班 职务:小班长 爱好:唱歌.排球 2. 姓名:xxx 性别:男 出生日期:1993.4.20 3. 姓名:xxx 性别: ...
- MVC Model数据验证
概述 上节我们学习了Model的数据在界面之间的传递,但是很多时候,我们在数据传递的时候为了确保数据的有效性,不得不给Model的相关属性做基本的数据验证. 本节我们就学习如何使用 System.Co ...
- Beta阶段站立会议-01
组名:金州勇士 组长:尹良亮 组员:王汉斌.杜月.闫浩楠 代码地址: ssh:git@git.coding.net:handsomeman/examm.githttps://git.coding.ne ...
- Transform a BST to greater sum tree
Given a BST, transform it into greater sum tree where each node contains sum of all nodes greater th ...
- Docker Compose—简化复杂容器应用的利器
Compose是用于定义和运行复杂Docker应用的工具.你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成. 1. 安装Docker和Compo ...
- 读过的laravel文章
Laravel 中使用 JWT(Json Web Token) 实现基于API的用户认证 http://www.tuicool.com/articles/IRJnaa api token https: ...