日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jzoj4015-数列【循环节,数论】

發布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 1e6n1e6直接O(n)O(n)O(n)暴力做
第二段m≤1e6m\leq 1e6m1e6找到一個循環節然后在套到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-数列【循环节,数论】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。