题目

给出\(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 数列的更多相关文章

  1. M斐波那契数列(矩阵快速幂+费马小定理)

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  2. 【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,表示数据 ...

  3. HDU 4549 M斐波那契数列(矩阵快速幂+费马小定理)

    M斐波那契数列 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submi ...

  4. HDOJ 4549 M斐波那契数列 费马小定理+矩阵高速幂

    MF( i ) = a ^ fib( i-1 ) * b ^ fib ( i )   ( i>=3) mod 1000000007 是质数 , 依据费马小定理  a^phi( p ) = 1 ( ...

  5. HDU4549 M斐波那契数列 —— 斐波那契、费马小定理、矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-4549 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Li ...

  6. [bzoj5118]Fib数列2_费马小定理_矩阵乘法

    Fib数列2 bzoj-5118 题目大意:求Fib($2^n$). 注释:$1\le n\le 10^{15}$. 想法:开始一看觉得一定是道神题,多好的题面啊?结果...妈的,模数是质数,费马小定 ...

  7. hdu 4549 M斐波那契数列(快速幂 矩阵快速幂 费马小定理)

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4549: 题目是中文的很容易理解吧.可一开始我把题目看错了,这毛病哈哈. 一开始我看错题时,就用了一个快速 ...

  8. Fib数列2 费马小定理+矩阵乘法

    题解: 费马小定理 a^(p-1)=1(mod p) 这里推广到矩阵也是成立的 所以我们可以对(2^n)%(p-1) 然后矩阵乘法维护就好了 模数较大使用快速乘

  9. bzoj5118: Fib数列2(费马小定理+矩阵快速幂)

    题目大意:求$fib(2^n)$ 就是求fib矩阵的(2^n)次方%p,p是质数,根据费马小定理有 注意因为模数比较大会爆LL,得写快速乘法... #include<bits/stdc++.h& ...

  10. nyoj1000_快速幂_费马小定理

    又见斐波那契数列 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 斐波那契数列大家应该很熟悉了吧.下面给大家引入一种新的斐波那契数列:M斐波那契数列. M斐波那契数列 ...

随机推荐

  1. Kotlin return@xxx 的坑

    Kotlin Return 到标签 先看例子: (1..5).forEach { if (it == 3) { return@forEach } println(it) } println(" ...

  2. ProtoBuf 基本使用

    一.是什么 Protocol Buffers,是Google公司开发的一种数据描述语言,是一种平台无关.语言无关.可扩展且类似于XML能够将结构化数据序列化,可用于数据存储.通信协议等方面. 二.为什 ...

  3. C#程序全局异常处理—WPF和Web API两种模式

    C#程序的全局异常处理,网上搜下资料都是一大堆,我这里最近也是独立做一个B/S结构的小项目, 后面又增加了需求用WPF实现相同的功能,这里将我所使用的全局异常处理方式做一个简短的总结分享. Web A ...

  4. DataGear 制作基于Vue2、Element UI前端框架的数据可视化看板

    DataGear 数据可视化看板内置了一些基本.简单的页面交互组件,当它们无法满足实际看板需求时,可以引入更流行和强大的前端框架. 本文以Vue2.Element UI前端框架为例,介绍如何制作具有更 ...

  5. STL-list模拟实现

    #pragma once #include"16my_Itetator.h" //测试用 #include<iostream> //测试用 using std::cou ...

  6. vscode 切换项目快捷键 Alt + Shift + P 插件 Project Manager

    vscode 切换项目快捷键 Alt + Shift + P 插件 Project Manager 需求 快速切换同时打开的项目 解决方案 Alt + Shift + P 话说这个插件很早就用了,但是 ...

  7. 写了一个 dict.cn 的油猴脚本,目的是通过url进行搜索。这样就能配合wox进行单词的搜索了。

    写了一个 dict.cn 的油猴脚本,目的是通过url进行搜索.这样就能配合wox进行单词的搜索了. // ==UserScript== // @name dict.cn // @namespace ...

  8. 深入浅出Java多线程(十二):线程池

    引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第十二篇内容:线程池.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在现代软件开发中,多线程编程已经成为应对 ...

  9. Python使用os模块创建带时间戳的文件夹

    直接上源码: # 导入os模块 import os import time # 创建文件夹函数 def mkdir(path): # os.path.exists 函数判断文件夹是否存在 folder ...

  10. Kotlin学习快速入门(8)—— 委托

    原文地址:Kotlin学习快速入门(8)-- 属性委托 - Stars-One的杂货小窝 委托其实是一种设计模式,但Kotlin把此特性编写进了语法中,可以方便开发者快速使用 委托对应的关键字是by ...