2010年8月14日 星期六

408 - Uniform Generator

寫程式常會用到亂數,有一種常用來產生虛擬亂數的方法是套用下列公式:

displaymath29

tex2html_wrap_inline31 符號是模數運算子。

用這種方式產生出來的亂數會介於0到MOD-1之間。此亂數產生器的缺點是它可能以一定的規律重覆產生相同的一組亂數,為了解決這個問題,我們可以小心地選擇SETP與MOD值來產生其值介於0到MOD-1之間均勻分佈(uniform distribution)的亂數。

例如當SETP=3 且 MOD=5 時,所產生的虛擬亂數為 0, 3, 1, 4, 2,並且會重覆此一循環。由這個例子觀察到所有介於0到MOD-1的數值皆會在MOD次迭代內一一產生出來。注意,此亂數產生器的性質是相同的亂數種子seed(x)所產生出來的下一個亂數seed(x+1)是固定的,這表示如果一個亂數產生器會產生出所有介於0到MOD-1的數值,則它每MOD次迭代所產生的虛擬亂數將會呈現均勻分佈(uniform distribution)。

若令SETP=15, MOD=20,亂數產生器會重覆產生亂數 0, 15, 10, 5 (此為初始亂數種子為零的情況,若不為零的話,則會產生其他組亂數)。選擇這樣的SETP與MOD值並不洽當,因為沒有一個初始亂數能產生出所有介於0到MOD-1的數值。

你的程式要能決定是否一組特定的SETP, MOD值能產生出均勻分佈的亂數。

Input

每列輸入會有一對整數SETP與MOD ( tex2html_wrap_inline77 )。

Output

請在一列的1~10的位置靠右輸出SETP值,在11~20的位置輸出MOD值,並在第25的位置上輸出"Good Choice"或"Bad Choice"。當所選擇的SETP與MOD值能產生出所有介於0到MOD-1的亂數時,請輸出"Good Choice",否則輸出"Bad Choice"。請在每個測試資料的輸出後面再多列印一個空行。

Sample Input

3 5
15 20
63923 99999

Sample Output

         3         5    Good Choice

15 20 Bad Choice

63923 99999 Good Choice


1 則留言:

  1. Sample Output寫錯了 僅有字首是大寫
    "Good Choice" "Bad Choice"

    回覆刪除