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

2021-08-18 16:47:35 字數 1293 閱讀 2666

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這幾種情況。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define rg register

inline

int read()

int fpow(int a,int b,int mod)

return s;

}const

int hashmod=111111;

struct hashtable

e[100000];

int h[hashmod],cnt;

void add(int u,int v,int w);h[u]=cnt;}

void clear()

void insert(int x,int i)

int query(int x)

}hash;

int bsgs(int a,int y,int z,int p)

return -2;

}int main()

if(a==0)

if(a==1)

t=(t+p-x1)%p;

t=1ll*t*fpow(b,p-2,p)%p;

printf("%d\n",t+1);

continue;

}c=1ll*b*fpow(a-1,p-2,p)%p;

t=(t+c)%p;x1=(x1+c)%p;

printf("%d\n",bsgs(x1,a,t,p)+1);

}return

0;}

bzoj3122 隨機數生成器 BSGS

這道題目真是太坑爹了。狂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 移項...

隨機數生成器

標頭檔案 內容 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用這種方法生...