JZOJ 3366 隨機數生成器

2021-12-29 19:39:09 字數 1205 閱讀 6048

jzoj 3366 隨機數生成器:棟棟最近迷上了隨機演算法,而隨機數生成是隨機演算法的基礎。棟棟準備使用線性同餘法來生成乙個隨機數列,這種方法需要設定四個非負整數引數 m, a, c, x0,按照下面的公式生成出一系列隨機數:

xn+1=(axn+c) mod m

其中 mod m 表示前面的數除以m的餘數。從這個式子可以看出,這個序列的下乙個數總是由上乙個數生成的。

用這種方法生成的序列具有隨機序列的性質,因此這種方法被廣泛地使用,包括常用的 c++和 pascal 的產生隨機數的庫函式使用的也是這種方法。

棟棟知道這樣產生的序列具有良好的隨機性,不過心急的他仍然想盡快知道xn是多少。由於棟棟需要的隨機數是0, 1, … ,n?1 之間的,他需要將 xn 除以g取餘得到他想要的數,即 xn mod g,你只需要告訴棟棟他想要的數xn mod g是多少就可以了。

複雜度:o(log(n))

副:ll*ll取模

long long cm(long long a, long long b)

a += a;

if(a >= c) a -= c;

b >>= 1;

} return ret;

}#include

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

using namespace std;

typedef long long ll;

ll n,m,ans;

ll mo,a1,c,x0,mg;

ll a[2],b[2][2];

long long cm(long long a, long long b)

a += a;

if(a >= c) a -= c;

b >>= 1;

} return ret;

} void chenans()

void chen()

; fo(i,0,1)

fo(j,0,1)

fo(k,0,1)

fo(i,0,1)fo(j,0,1)b[i][j]=s[i][j];

}int main()

printf("%lld\n",a[0]%mg);

return 0;

}

隨機數生成器

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

MATLAB隨機數生成器

1 rand 生成 0,1 區間上均勻分布的隨機數 基本語法 rand m,n,p 生成排列成m n p 多維向量的隨機數。如果只寫m,則生成m m矩陣 如果引數為 m,n 可以省略方括號。2 randn 生成服從標準正太分布 均值為0,方差為1 的隨機數 基本語法 randn m,n,p,解釋同1...

隨機數生成器,隨機種子

遊戲中經常要用到隨機數,但如果乙個沒有隨機種子的的生成器,就沒法重複之前的隨機數了。js的math.random就用不了隨機種子,只好自己弄了乙個,有了隨機種子,每次只要傳入相同的種子,都會得到同樣的隨機數。直接 function seededrandom seed,min,max 這是一種偽隨機數...