正题

题目链接: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-数列【循环节,数论】相关推荐

  1. 2018年东北农业大学春季校赛 K wyh的数列【数论/斐波那契数列大数取模/循环节】...

    链接:https://www.nowcoder.com/acm/contest/93/K 来源:牛客网 题目描述 wyh学长特别喜欢斐波那契数列,F(0)=0,F(1)=1,F(n)=F(n-1)+F ...

  2. 广义Fibonacci数列找循环节

    今天将来学习如何求广义Fibonacci数列的循环节. 问题:给定,满足,求的循 环节长度. 来源:http://acdreamoj.sinaapp.com/ 1075题   分析:我们知道矩阵的递推 ...

  3. luogu 1327 数列排序 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 J题 循环节

    luogu 1327 数列排序 题意 给定一个数列\(\{an\}\),这个数列满足\(ai≠aj(i≠j)\),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换? ...

  4. 牛客 - 交换(思维+找循环节)

    题目链接:点击查看 题目大意:给出一个数列 n ,要求通过交换使其从小到大排序的最小次数 题目分析:第一反应是求逆序对,把之前做过的题目贴过来结果只过了 10% ,静下心来又读了一下题,发现这个题目要 ...

  5. Fib数模n的循环节

    我们知道Fibonacci数列,现在我们来求一个Fib数模n的循环节的长度. 对于一个正整数n,我们求Fib数模n的循环节的长度的方法如下: (1)把n素因子分解,即 (2)分别计算Fib数模每个的循 ...

  6. UVa 202 - Repeating Decimals —— 分数循环节

    题目:计算分数的循环节. https://vjudge.net/contest/227853#problem/C 分析:数论,组合. n除以m的余数只能是0~m-1,根据抽屉原则,当计算m+1次时至少 ...

  7. 51Nod - 1035 最长的循环节

    51Nod - 1035 最长的循环节 正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数,假如存在多个最优的答案,输出所有 ...

  8. hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)

    Problem - 3374 KMP求循环节. http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html 循环节推导的证明相当的好,这 ...

  9. 输出1/n(是循环小数的,只输出第一个循环节)

    Input 第一行整数T,表示测试组数.后面T行,每行一个整数 n (1<=|n|<=10^5). Output 输出1/n. (是循环小数的,只输出第一个循环节). Sample Inp ...

最新文章

  1. Centos源码安装Cmake
  2. VTK:IO之ReadPNM
  3. java中的equals拿什么鞋的_Java中==和equals方法
  4. 开始使用gitlab
  5. 各大媒体优劣对比_信息流投放广告丨各大平台的信息流都有什么特点与弊端
  6. 科一主观题刷题 0308
  7. css索引_CSS中的Z索引:它是什么以及它做什么
  8. 创意油墨飞溅效果的绿树矢量素材
  9. pfSense修改mbuf值
  10. 文件操作 详解(freopen)(C++)
  11. Thinkphp 6.0商城系统,B2C商城系统全新UI
  12. 1.2 Illustrator多文档的几种排列方式
  13. 基于wifi的物联网技术,主要有哪些优势?
  14. AsPack压缩工具
  15. PLC-Recorder快速监控多个PLC位的技巧
  16. kile编辑器有关使用说明
  17. HTML5 之 Form 标签
  18. eSIM产业动态(持续更新)
  19. ROS安装:一键解决人生烦恼
  20. 粗心店主下班忘关店门 执勤巡特警守候至凌晨

热门文章

  1. win10前置耳机插孔没声音_音频服务未运行怎么办?win7和win10电脑没声音了恢复方法...
  2. mysql 批量_mysql LOAD语句批量录入数据
  3. 京东面试官:呦,你对中间件 Mycat了解的还挺深~
  4. 命中率_数据说话!詹姆斯的“皇家射手团”命中率为近十年最低
  5. 使有用计算机不注意卫生,保护眼睛注意细节有哪些
  6. java疯狂讲义内存分配_java疯狂讲义学习:面向对象(上)
  7. java opencsv_用opencsv文件读写CSV文件
  8. c++——优先队列(priority_queue)
  9. PyTorch深度学习实践
  10. 后端学习 - Redis