luogu2044 隨機數生成器

2022-09-08 00:09:18 字數 1081 閱讀 4281

題目描述

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

x[n+1]=(ax[n]+c) mod m
用這種方法生成的序列具有隨機序列的性質,因此這種方法被廣泛地使用,包括常用的c++和pascal的產生隨機數的庫函式使用的也是這種方法。

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

輸入輸出格式

輸入格式:

輸入包含6個用空格分割的整數m,a,c,x[0],n和g,其中a,c,x[0]是非負整數,m,n,g是正整數。

輸出格式:

輸出乙個數,即x[n] mod g

輸入輸出樣例

輸入樣例#1:

11 8 7 1 5 3

輸出樣例#1:

2說明

計算得x[n]=x[5]=8,故(x[n] mod g) = (8 mod 3) = 2

100%的資料中n,m,a,c,x[0]<=10^18,g<=10^8

唯一需要注意的就是:在做乘法取%時要換成加法

這裡寫**片

#include

#include

#include

#define ll long long

using namespace std;

ll mm,a,c,x

0,n,g,s;

ll mult(ll x,ll y) //把乘法變成加法,x加y次

struct node

return ans;

}void clear()

node ksm(ll p)

return an;

}};int main()

luogu3600 隨機數生成器

給定n個 1 x 的隨機整數 a 1,a 2,a 3,a n 和q個詢問區間 l i,r i 求出 max 的期望 對於10 的資料,n,x,q 6 對於另外20 的資料,q 1 對於50 的資料,n,x,q 300 對於100 的資料,1 n,x,q 2000 對於每個i,1 li ri n 又是...

隨機數生成器

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

洛谷P2044 隨機數生成器

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