#费马小定理#JZOJ 4015 数列
题目
给出\(x_n=(ax_{n-1}^2+bx_{n-1}+c)\bmod m\)
给出\(x_0.a,b,c,n,m\),求\(x_n\)
\(\text{Subtask 1:}n\leq 10^6,m\leq 10^9\)
\(\text{Subtask 2:}n\leq 10^9,m\leq 10^6\)
\(\text{Subtask 3:}n\leq 10^9,m\leq 10^9,2a|b,4ac+1=(b-1)^2,m是质数\)
分析
前两个子任务都很简单,第一个纯模拟,第二个循环节,第三个就有点难搞了,考虑用性质推式子
\(x_n=a(x_{n-1}+\frac{b}{2a})^2+\frac{4ac-b^2}{4a}\)
\(x_n=a(x_{n-1}+k)^2+\frac{(b-1)^2-b^2-1}{4a}=a(x_{n-1}+k)+{\frac{-2b}{4a}}=a(x_{n-1}+k)^2-k(k=\frac{b}{2a})\)
那么\(x_n+k=a(x_{n-1}+k)^2\)
设\(D_n=x_n+k\),通过推导可以得出\(D_n=a^{2^n-1}D_{0}^{2^n}\)
既然\(m\)是质数,就可以用费马小定理求解了
代码
#include <cstdio>
#define rr register
using namespace std;
int x0,a,b,c,n,mod;
inline signed mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
inline signed nxig(int x){return mo(1ll*mo(1ll*a*x%mod,b)*x%mod,c);}
inline void baoli(){
for (rr int i=1;i<=n;++i) x0=nxig(x0);
printf("%d",x0);
}
inline void floyd1(){
rr int p[1000011],ans[1000011],rep,len,pos;
for (rr int i=0;i<mod;++i) p[i]=-1; p[x0]=0,ans[0]=x0;
for (rr int i=1;i<=mod;++i){
if (i>n) break;
x0=nxig(x0),ans[i]=x0;
if (p[x0]==-1) p[x0]=i;
else {rep=p[x0]; len=i-p[x0]; break;}
}
if (n<rep) pos=n;
else pos=rep+(n-rep)%len;
printf("%d",ans[pos]);
}
inline signed ksm(int x,int y,int mod){
rr int ans=1;
for (;y;y>>=1,x=1ll*x*x%mod)
if (y&1) ans=1ll*ans*x%mod;
return ans;
}
inline void floyd2(){
rr int k=b/(a*2);
x0+=k,x0=1ll*ksm(1ll*a*x0%mod,mo(ksm(2,n,mod-1),mod-1),mod)*x0%mod,x0=mo(x0,mod-k);
printf("%d",x0);
}
signed main(){
scanf("%d%d%d%d%d%d",&x0,&a,&b,&c,&n,&mod),
x0%=mod,a%=mod,b%=mod,c%=mod;
if (n<=1000000) baoli();
else{
if (mod<=1000000) floyd1();
else floyd2();
}
return 0;
}
#费马小定理#JZOJ 4015 数列的更多相关文章
- M斐波那契数列(矩阵快速幂+费马小定理)
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- 【bzoj5118】Fib数列2 费马小定理+矩阵乘法
题目描述 Fib定义为Fib(0)=0,Fib(1)=1,对于n≥2,Fib(n)=Fib(n-1)+Fib(n-2) 现给出N,求Fib(2^n). 输入 本题有多组数据.第一行一个整数T,表示数据 ...
- HDU 4549 M斐波那契数列(矩阵快速幂+费马小定理)
M斐波那契数列 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submi ...
- HDOJ 4549 M斐波那契数列 费马小定理+矩阵高速幂
MF( i ) = a ^ fib( i-1 ) * b ^ fib ( i ) ( i>=3) mod 1000000007 是质数 , 依据费马小定理 a^phi( p ) = 1 ( ...
- HDU4549 M斐波那契数列 —— 斐波那契、费马小定理、矩阵快速幂
题目链接:https://vjudge.net/problem/HDU-4549 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Li ...
- [bzoj5118]Fib数列2_费马小定理_矩阵乘法
Fib数列2 bzoj-5118 题目大意:求Fib($2^n$). 注释:$1\le n\le 10^{15}$. 想法:开始一看觉得一定是道神题,多好的题面啊?结果...妈的,模数是质数,费马小定 ...
- hdu 4549 M斐波那契数列(快速幂 矩阵快速幂 费马小定理)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4549: 题目是中文的很容易理解吧.可一开始我把题目看错了,这毛病哈哈. 一开始我看错题时,就用了一个快速 ...
- Fib数列2 费马小定理+矩阵乘法
题解: 费马小定理 a^(p-1)=1(mod p) 这里推广到矩阵也是成立的 所以我们可以对(2^n)%(p-1) 然后矩阵乘法维护就好了 模数较大使用快速乘
- bzoj5118: Fib数列2(费马小定理+矩阵快速幂)
题目大意:求$fib(2^n)$ 就是求fib矩阵的(2^n)次方%p,p是质数,根据费马小定理有 注意因为模数比较大会爆LL,得写快速乘法... #include<bits/stdc++.h& ...
- nyoj1000_快速幂_费马小定理
又见斐波那契数列 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 斐波那契数列大家应该很熟悉了吧.下面给大家引入一种新的斐波那契数列:M斐波那契数列. M斐波那契数列 ...
随机推荐
- 【Android 逆向】【ARM汇编】 全局资源重定位
资源重定位解释: 字符串反汇编代码解释: .rodata:00001E20 __exidx_end DCB "a + b = %d" ; DATA_XREF: main+28^o ...
- [BUUCTF][WEB][极客大挑战 2019]Upload 1
打开靶机url,看到一个页面可以上传文件 上传一个图片试一下,发现上传的路径是 http://a7661b03-4852-41de-9ea4-d48c47cb50f0.node4.buuoj.cn:8 ...
- 在Windows10中安装解压版MySQL 8.X
在Windows 10中安装解压版的MySQL 8.X实现步骤: 1.下载MySQL安装包:https://dev.mysql.com/downloads/mysql/ 解压到指定目录,比如:D:\o ...
- ubuntu18.04下nginx配合fastdfs使用的安装和配置
前期准备 1.安装依赖包 # 新装的ubuntu缺少gcc编译,需要先安装这个 sudo apt-get install build-essential 1.解压缩 libfastcommon-mas ...
- React 组件之属性
如果你想要实现自己的梦想,就必须先拥有勇气去追求它. 1. React Props 属性 props 主要解决两个问题:复用性问题以及可以让组件之间通信. 属性 props 正常是外部传入的,组件内部 ...
- dilb安装的三种方法
dilb库安装失败,源码安装嘎嘎报错,所以这里记录一下 dlib库是一个很特殊的库,在下载dlib库之前需要下载两个库(cmake.boost这两个库) pip install cmake boost ...
- VIM初使化
vim ~/.vimrc #设置编码 set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936 #显示行号 set number #一个tab为4个空格 ...
- Codeforces Round 113 (Div. 2)E. Tetrahedron(dp、递推)
目录 题面 链接 题意 题解 代码 总结 题面 链接 E. Tetrahedron 题意 从一个顶点出发走过路径长度为n回到出发点的方案总数 题解 考虑dp \(f[i][0|1|2|3]\):走了i ...
- ConcurrentHashMap的put方法
使用JDK8 源码: public V put(K key, V value) { return putVal(key, value, false); } /** Implementation for ...
- ansible 自动化运维(1)
ansible 简介 ansible 是什么? ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量 ...