jzoj4015-数列【循环节,数论】
正题
题目链接:https://jzoj.net/senior/#contest/show/3011/0
题目大意
给出n,m,a,b,c,x0n,m,a,b,c,x_0n,m,a,b,c,x0
xi=axi−12+bxi−1+cx_i=ax_{i-1}^2+bx_{i-1}+cxi=axi−12+bxi−1+c
求xn%mx_n\%mxn%m
解题思路
第一段n≤1e6n\leq 1e6n≤1e6直接O(n)O(n)O(n)暴力做
第二段m≤1e6m\leq 1e6m≤1e6找到一个循环节然后在套到n里
第三段:
xi=axi−12+bxi−1+cx_i=ax_{i-1}^2+bx_{i-1}+cxi=axi−12+bxi−1+c
学过二次函数的对于给出的性质有敏锐的直觉
xi=a(x+b2a)2+4ac−b24ax_i=a(x+\frac{b}{2a})^2+\frac{4ac-b^2}{4a}xi=a(x+2ab)2+4a4ac−b2
4ac=b2−2b⇒4ac−b2=2b4ac=b^2-2b\Rightarrow 4ac-b^2=2b4ac=b2−2b⇒4ac−b2=2b
xi=a(x+b2a)2−b2ax_i=a(x+\frac{b}{2a})^2-\frac{b}{2a}xi=a(x+2ab)2−2ab
然后定义k=b2ak=\frac{b}{2a}k=2ab
xi+k=a(x+k)2x_i+k=a(x+k)^2xi+k=a(x+k)2
同时乘上aaa
a(xi+k)=(a(x+k))2a(x_i+k)=(a(x+k))^2a(xi+k)=(a(x+k))2
定义yi=a(xi+k)y_i=a(x_i+k)yi=a(xi+k)
那么有yi=yi−12y_i=y_{i-1}^2yi=yi−12
即yn=y02ny_n=y_{0}^{2^n}yn=y02n
用费马小可以让指数摸上m−1m-1m−1计算出yny_nyn,然后倒推出xnx_nxn
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll M=1e6+10;
ll n,m,a,b,c,x,fa[M],cir[M],v[M];
void solve1(){for(ll i=1;i<=n;i++)x=(a*x%m*x%m+b*x%m+c)%m;printf("%lld",x);
}
void solve2(){x%=m;for(ll i=0;i<=m;i++)fa[i]=(a*i%m*i%m+b*i%m+c)%m;ll cnt=0;cir[0]=x;v[x]=1;while(!v[x=fa[x]])cir[++cnt]=x,v[x]=cnt;x=v[x];if(n<=cnt) printf("%lld",cir[n]);else{n-=x;printf("%lld",cir[x+n%(cnt-x+1)]);}
}
ll power(ll x,ll b,ll p){ll ans=1;while(b){if(b&1) ans=ans*x%p;x=x*x%p;b>>=1;}return ans;
}
void solve3(){ll z=b/2/a,y=a*(x+z)%m;y=power(y,power(2,n,m-1),m);printf("%lld",(y*power(a,m-2,m)%m-z+m)%m);
}
int main()
{scanf("%lld%lld%lld%lld%lld%lld",&x,&a,&b,&c,&n,&m);x=x%m;a%=m;b%=m;c%=m;if(n<=1e6)solve1();else if(m<=1e6)solve2();else solve3();
}
jzoj4015-数列【循环节,数论】相关推荐
- 2018年东北农业大学春季校赛 K wyh的数列【数论/斐波那契数列大数取模/循环节】...
链接:https://www.nowcoder.com/acm/contest/93/K 来源:牛客网 题目描述 wyh学长特别喜欢斐波那契数列,F(0)=0,F(1)=1,F(n)=F(n-1)+F ...
- 广义Fibonacci数列找循环节
今天将来学习如何求广义Fibonacci数列的循环节. 问题:给定,满足,求的循 环节长度. 来源:http://acdreamoj.sinaapp.com/ 1075题 分析:我们知道矩阵的递推 ...
- luogu 1327 数列排序 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 J题 循环节
luogu 1327 数列排序 题意 给定一个数列\(\{an\}\),这个数列满足\(ai≠aj(i≠j)\),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换? ...
- 牛客 - 交换(思维+找循环节)
题目链接:点击查看 题目大意:给出一个数列 n ,要求通过交换使其从小到大排序的最小次数 题目分析:第一反应是求逆序对,把之前做过的题目贴过来结果只过了 10% ,静下心来又读了一下题,发现这个题目要 ...
- Fib数模n的循环节
我们知道Fibonacci数列,现在我们来求一个Fib数模n的循环节的长度. 对于一个正整数n,我们求Fib数模n的循环节的长度的方法如下: (1)把n素因子分解,即 (2)分别计算Fib数模每个的循 ...
- UVa 202 - Repeating Decimals —— 分数循环节
题目:计算分数的循环节. https://vjudge.net/contest/227853#problem/C 分析:数论,组合. n除以m的余数只能是0~m-1,根据抽屉原则,当计算m+1次时至少 ...
- 51Nod - 1035 最长的循环节
51Nod - 1035 最长的循环节 正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数,假如存在多个最优的答案,输出所有 ...
- hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)
Problem - 3374 KMP求循环节. http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html 循环节推导的证明相当的好,这 ...
- 输出1/n(是循环小数的,只输出第一个循环节)
Input 第一行整数T,表示测试组数.后面T行,每行一个整数 n (1<=|n|<=10^5). Output 输出1/n. (是循环小数的,只输出第一个循环节). Sample Inp ...
最新文章
- 什么是LinkedList?什么时候使用它呢?Java LinkedList结构、用法及源码解析
- 数量庞大!中国成长型AI企业研究报告
- 华为存储iscsi配置_iscsi 华为存储配置 上课内容
- java服务端同时接收和发送_如何实现客户端接收数据和发送数据的同步?
- 遇到automation服务器不能创建对象...
- python编程从入门到精通读书笔记(基础知识)
- Magic进博会!中国媒体上马了一条神奇的视频生产线
- [整理]CHttpConnection的使用
- Shell之分支结构和循环结构
- 云计算成了“晕技术”就对了
- 电子计算机 电子工程 职称,电子信息工程师职称评定
- 基于 InVEST 模型的水涵养功能评估数据获取
- 计算机仿真是北大核心期刊,计算机仿真 北大核心期刊统计源期刊 CSCD核心期刊...
- 腾讯 信鸽测试demo
- 《UnityAPI.GameObject游戏对象》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+isStatic+SendMessage+Find+立钻哥哥++OK++)
- Tri Tiling·递推
- android svg 线条动画教程,简单的SVG线条动画
- M1芯片的Mac上iPhone虚拟机滚动过快的问题
- 软件设计师选择题真题知识点归纳
- Halcon 网格缺陷检测
热门文章
- win2003无法进入桌面_救急,如何通过命令行备份桌面重要文件?
- 参加计算机竞赛需要学什么知识,数学和计算机专业,我应该参加那些比赛?
- python安装地是什么_如何安装python
- linux配置文件引用时间,linux时间设置、screen使用、命令分类、hash作用、命令引用及history命令...
- 算法——常用的数据结构/模板/基础知识
- 王某调离岗位后所使用计算机由新到任陈某,2017年沧州事业单位考试模拟卷
- 太平洋大西洋水流问题如何解决?一文了解图在前端中的应用
- java numberformat异常_Java NumberFormat格式化float类型的bug
- Adapter(适配器)--类对象结构型模式
- 番茄时间有感之关于在疫情期间我与ACM不得不说的故事