bzoj3122 隨機數生成器 BSGS

2021-07-09 23:00:45 字數 627 閱讀 4204

這道題目真是太坑爹了。。。狂wa無數次。

將原來那個看成x0,最後答案再加1,這樣會簡單一點,假設答案是n(最後需要+1),那麼不斷迭代會發現

xn=a^nx0+(a^n-1+a^n-2+...+1)b

≡t(mod p),然後運用等比數列公式得到a^nx0+(a^n-1)/(a-1) *b≡t(mod p),兩邊同乘(a-1),移項得到:

[(a-1)*x0+b] a^n≡t(a-1)+b(mod p),然後就可以運用逆把 a^n求出來,然後就可以運用bsgs(baby-step-giant-step,shank大步小步法)得到n了。

注意上述公式再a=0,a=1時失效,需要特判。

ac**如下:

#include#include#include#include#include#define ll long long

using namespace std;

int p,a,b,x,t,n,cnt; struct nodec[100005];

int inv(int x)

bool cmp(node aa,node bb){ return (aa.x==bb.x)?aa.y>1; if (c[mid].x

by lych

2016.2.15

BZOJ3122 隨機數生成器(BSGS,數論)

bzoj 洛谷考慮一下遞推式 發現一定可以寫成乙個 xi 1 x1 c ai c的形式 直接暴力解一下 xi 1 c a x i c 解得c ba 1 這樣子,相當於得到了乙個k ax t c m odp 這樣的式子 這個顯然是個裸的bs gs直接解出來就行了 注意特判一下a 0,a 1,x1 t這...

隨機數生成器

標頭檔案 內容 rand,srand函式和rand max常量 rand max 在windows系統中為32767 在類unix系統中為2147483647 rand 函式返回乙個0 rand max的隨機整數 srand seed 函式 接受unsigned int 型別的引數seed,以see...

Bzoj2875 隨機數生成器

題目描述 棟棟最近迷上了隨機演算法,而隨機數是生成隨機演算法的基礎。棟棟準備使用線性同餘法 linear congruential method 來生成乙個隨機數列,這種方法需要設定四個非負整數引數m,a,c,x 0 按照下面的公式生成出一系列隨機數 x n 1 ax n c mod m用這種方法生...