洛谷P2044 隨機數生成器

2022-03-01 06:43:19 字數 1102 閱讀 8896

棟棟最近迷上了隨機演算法,而隨機數是生成隨機演算法的基礎。棟棟準備使用線性同餘法(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

#include

using

namespace

std;

typedef

long

long

ll;struct

matp,q;

ll m,a,c,x,n,g;

inline ll mul(ll a,ll b)

inline mat matmul(mat a,mat b)

return

res;

}mat matpow(mat a,ll p)

intmain()

洛谷P2044 NOI2012 隨機數生成器

數列 x ax n c bmod m 其中 a,c 是給定的常數,n 0 x 0 的值已給出。然後呢,你需要求出 x n bmod g n,m,a,c,x 0 leq10 g leq 10 8 構造列向量 c n begin1 x n end 然後,構造轉移矩陣 begin1 0 c a endc ...

洛谷P3306 隨機數生成器

題意 給你乙個數列,a1 x,ai a ai 1 b p,求第乙個是t的是哪一項,或者永遠不會有t。解 迴圈節不會超過p。我們使用bsgs的思想,預處理從t開始跳 p步的,插入hash表內。然後每次把a1跳 p步,來看是否在hash表中存在。這樣發現我們有40,wa了60分。為什麼呢?考慮是否存在兩...

luogu2044 隨機數生成器

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