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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

P3306-[SDOI2013]随机数生成器【BSGS】

發布時間:2023/12/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P3306-[SDOI2013]随机数生成器【BSGS】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/P3306


題目大意

給出一個p,a,b,x1,tp,a,b,x_1,tp,a,b,x1?,t,有xi=axi?1+bx_i=ax_{i-1}+bxi?=axi?1?+b
求一個最小的nnn使得xn=tx_n=txn?=t


解題思路

下標縮一下先變成x0x_0x0?會更好算一點,只考慮x0x_0x0?的貢獻就是x0×anx_0\times a^nx0?×an,這個比較好搞。

bbb的貢獻的話,對于第iii次加入的bbb貢獻是an?ia^{n-i}an?i總共也就是b×∑i=0n?1aib\times \sum_{i=0}^{n-1}a^ib×i=0n?1?ai
通項公式一下合起來就是
x0an+an?1a?1b=tx_0a^n+\frac{a^n-1}{a-1}b=tx0?an+a?1an?1?b=t
ana^nan提到前面來就是
an=t(a?1)+bxa?x+ba^n=\frac{t(a-1)+b}{xa-x+b}an=xa?x+bt(a?1)+b?
后面那個是已知的,然后就是上BSGS\text{BSGS}BSGS就好了。

需要注意的是如果a=1a=1a=1就不能用通項公式了,得上exgcd\text{exgcd}exgcd來搞。

要特判的東西有點多就不多講了


code

#include<cstdio> #include<cstring> #include<algorithm> #include<map> #include<cmath> #define ll long long using namespace std; ll T,p,a,b,x,t,ans; map<ll,ll> v; ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%p;x=x*x%p;b>>=1;}return ans; } ll exgcd(ll a,ll b,ll &x,ll &y){if(!b){x=1;y=0;return a;}ll d=exgcd(b,a%b,x,y);ll z=x;x=y;y=z-a/b*y;return d; } void works(ll a,ll b,ll p){ll x,y;ll d=exgcd(a,p,x,y);if(b%d){printf("-1\n");return;}x*=b/d;y*=b/d;printf("%lld\n",(x%(d*p)+d*p)%(d*p)+1); } ll work(ll a,ll b,ll p){if(!a&&!b)return 1;if(!a)return -2;ll t=sqrt(p)+1;v.clear();for(ll i=0,z=1;i<t;i++,z=z*a%p)v[z*b%p]=i;a=power(a,t);if(b==1||!a)return 1;else if(!a)return -2;ll ans=1e18;for(ll i=0,tmp=1;i<=t;i++,tmp=tmp*a%p){ll j=(v.find(tmp)!=v.end())?v[tmp]:-1;if(j>=0&&i*t-j>=0)ans=min(ans,i*t-j);}if(ans==1e18)return -2;return ans; } signed main() {scanf("%lld",&T);while(T--){scanf("%lld%lld%lld%lld%lld",&p,&a,&b,&x,&t);if(!a&&!t&&b){puts("-1");continue;}if(x==t){puts("1");continue;}if(a==1){works(b,(t-x+p)%p,p);continue;}t=(t*(a-1)+b)%p;x=(x*a-x+b+p)%p;t=t*power(x,p-2)%p;t=(t+p)%p;printf("%lld\n",work(a,t,p)+1);}return 0; }

總結

以上是生活随笔為你收集整理的P3306-[SDOI2013]随机数生成器【BSGS】的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产aⅴ片 | 国产亚洲欧美在线 | 一级特黄肉体裸片 | 欧美一级爱爱视频 | 国产青青草在线 | 伊人久久爱 | 91精品国产色综合久久不卡粉嫩 | av一区二区三区在线观看 | 好妞色妞国产在线视频 | 国模二区 | 99人妻少妇精品视频一区 | 亚洲精品一二三四区 | 在线观看一区二区三区四区 | 国产精品va无码一区二区 | 成人午夜网址 | 欧美不卡一区二区三区 | 午夜三级在线观看 | 182午夜视频 | 精品国产丝袜一区二区三区乱码 | 日韩国产成人无码av毛片 | 蜜桃av网| 欧亚免费视频 | 毛片无限看 | 二区三区偷拍浴室洗澡视频 | 国产精品s | 国产黄a | 中国 免费 av| 一级做a爱片 | 一级爱爱免费视频 | 性开放网站 | 日日夜夜网站 | 黄色网址在线免费 | 久久逼逼 | 欧美精品一级 | 成人高潮片免费视频 | 俺也来俺也去俺也射 | 欧美激情二区三区 | 国产成人a v | 男人插女人视频网站 | 国产91白丝在一线播放 | 婷婷婷色 | 婷婷激情五月综合 | 少妇特黄一区二区三区 | 亚洲 欧美 日韩系列 | 日本三区在线 | 日韩精品在线观看一区二区三区 | 国产成人愉拍精品久久 | 极品videosvideo喷水 | 日韩在线视频免费 | 中文字幕一二区 | 欧美日韩不卡一区二区三区 | 亚洲精品大片www | 欧美69精品久久久久久不卡 | 国产亚洲精品熟女国产成人 | 在线视频 91 | 国产伦精品一区二区三区照片91 | 午夜精品美女久久久久av福利 | 国产一极毛片 | 国内一级黄色片 | 日本美女日批视频 | 亚洲视频在线播放免费 | 免费国偷自产拍精品视频 | 黄色在线观看网站 | 亚洲爱爱网站 | 成人激情综合 | 性xxxxxxxxx18欧美 | 欧美精品99久久久 | 美女扒开粉嫩的尿囗给男生桶 | 国产成人免费视频 | 毛片免费一区二区三区 | 精品人妻无码专区在线 | 欧美色图第一页 | 中文字字幕在线中文乱码 | 欧美性生活xxx | 亚洲iv一区二区三区 | 91国内 | 天堂在线免费观看 | 国产特黄大片aaaa毛片 | 四虎影院在线看 | 亚洲国产日韩一区二区 | 小早川怜子一区二区三区 | 欧美女优一区二区 | 亚洲经典av | 国产亚洲精品久久久久久 | 极品色av | 欧美影院 | 国产在线色站 | 日韩专区视频 | 天堂网男人 | 国产福利专区 | 三级国产在线观看 | 女女h百合无遮羞羞漫画软件 | 亚洲欧洲国产视频 | 爱爱视频免费网站 | 丁香六月av| 国产精品久久久久久久久久久不卡 | 黄色片成年人 | 女生被男生c | 丰满少妇被猛烈进入高清播放 |