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 這是一種偽隨機數...