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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

P3846-[TJOI2007]可爱的质数【BSGS,数论】

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

正題

題目鏈接:https://www.luogu.org/problemnew/show/P3846


題目大意

BL≡N(modP)B^L\equiv N(mod\ P)BLN(mod?P)
求最小的LLL


解題思路

首先為了順眼改一下變量名
Ax≡B(modP)A^x\equiv B(mod\ P)AxB(mod?P)
然后我們設x=i?t?j(0≤i≤t,0≤j≤t?1)x=i*t-j(0\leq i\leq t,0\leq j\leq t-1)x=i?t?j(0it,0jt?1)其中t=?P?t=\lceil \sqrt P\rceilt=?P??
這樣xxx就可以表示任何值
Ai?t?j≡B(modP)A^{i*t-j}\equiv B(mod\ P)Ai?t?jB(mod?P)
(At)i≡B?Aj(modP)(A^t)^i\equiv B*A^j(mod\ P)(At)iB?Aj(mod?P)
那我們可以枚舉jjj的所有值并用hashhashhash保存下來B?Aj%PB*A_j\%PB?Aj?%P的所有可能值。

然后枚舉iii(At)i%P(A^t)^i\% P(At)i%PB?AJ%PB*A_J\%PB?AJ?%P的值匹配就好了。

因為這里是用mapmapmap實現的

時間復雜度:O(nlogn):O(\sqrt n\ log\sqrt n):O(n??logn?)


codecodecode

#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<map> #define ll long long using namespace std; ll p,b,n,ans=1e18,t; 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; } int main() {scanf("%lld%lld%lld",&p,&n,&b);t=(int)sqrt(p)+1;for(ll i=0;i<t;i++){ll val=b*power(n,i)%p;v[val]=i;}n=power(n,t);if(n==0) {if(!b) printf("1");else printf("no solution");return 0;}for(ll i=0;i<=t;i++){ll val=power(n,i);ll j=v.find(val)==v.end()?-1:v[val];if(j>=0&&i*t-j>=0) ans=min(ans,i*t-j);}if(ans==1e18) printf("no solution");else printf("%lld",ans); }

總結

以上是生活随笔為你收集整理的P3846-[TJOI2007]可爱的质数【BSGS,数论】的全部內容,希望文章能夠幫你解決所遇到的問題。

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