#费马小定理#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斐波那契数列 ...
随机推荐
- 【手写信息搜集工具】ThunderSearch 闪电搜索器
ThunderSearch 闪电搜索器 项目地址:github Windows打包版 利用ZoomEye的官方api,结合开发文档,做了这么一个GUI界面的搜索器.目前支持查询host_search ...
- TypeScript项目开发运行(即时编译、运行,所见所得)
1.项目*.ts自动编译 $ tsc . --watch 2.项目本地web服务运行 $ npm install --save-dev webpack-dev-server npm install - ...
- 【Azure Developer】示例: 在中国区调用MSGraph SDK通过User principal name获取到User信息,如Object ID
问题描述 示例调用MSGraph SDK通过User principal name获取到User信息,如Object ID. 参考资料 选择 Microsoft Graph 身份验证提供程序 : ht ...
- 【Azure Developer】使用Python代码获取VM的IP地址 (Public IP + Private IP)【未解决问题标签】
记录使用以下的代码获取Azure VM中的IP地址 """Create and manage virtual machines. This script expects ...
- Geospatial Data 在 Nebula Graph 中的实践
本文首发于 Nebula Graph Community 公众号 本文主要介绍了地理空间数据(Geospatial Data)以及它在 Nebula Graph 中的具体实践. Geospatial ...
- require和import的区别以及相互使用的方式
Node.js 里可分为 CommonJS 模块和 ECMAScript 模块(ESM)两种不同的模块系统. CommonJS 模块是 Node.js 最初支持的模块系统,它使用 require() ...
- 17. Class字节码指令解析
## 1. 概述 官方文档:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html Java 字节码对于虚拟机,就好像汇编语言对于 ...
- Java-- Arrays操纵数组的工具类
1 //操作数组的工具类 java.util.Arrays :操作数组的工具类 里面定义了很多操作数组的方法 2 public static void main(String[] args) 3 { ...
- C++ 错误 具有类型“const sort”的表达式会丢失一些 const-volatile 限定符以调用“bool sort::operator ()(int,int)” 如下:环境 vs2019 内容:set内置函数排序
C++ 错误 具有类型"const sort"的表达式会丢失一些 const-volatile 限定符以调用"bool sort::operator ()(int,int ...
- GitHUb上渗透测试工具
来自GitHub的系列渗透测试工具渗透测试 Kali - GNU / Linux发行版,专为数字取证和渗透测试而设计.(https://www.kali.org/)ArchStrike - 为安全专业 ...