Python程式:找出集合元素移除遊戲中獲勝者
假設我們有一組前 n 個自然數 {1..n}。阿馬爾和比馬爾正在玩一個遊戲。遊戲規則如下:
阿馬爾總是先手
在每次移動中,當前玩家從集合中選擇一個素數 p。然後,該玩家移除 p 及其所有倍數。
誰沒有移動誰就輸掉比賽。如果我們有 n,我們必須找到獲勝者的名字。
因此,如果輸入像 n = 5,則輸出將是阿馬爾,因為初始集合是 {1,2,3,4,5}。現在假設阿馬爾選擇一個數字 p = 2,並從集合中移除 2、4,所以當前集合是 {1,3,5},還有兩個素數剩下,所以比馬爾可以選擇其中任何一個,但沒有剩餘元素可以移除,最後阿馬爾移除另一個素數並贏得比賽。
為了解決這個問題,我們將遵循以下步驟:
- primes := 一個大小為 100000 的陣列,最初所有值都為 0
- sieve := 一個大小為 100000 的陣列,最初所有值都為 0
- 對於 i 從 2 到 99999,執行以下操作:
- 如果 sieve[i] 等於 0,則:
- primes[i] := primes[i-1]+1
- 對於 j 從 i 到 100000,每次遞增 i,執行以下操作:
- sieve[j] := i
- 否則:
- primes[i] := primes[i-1]
- 如果 sieve[i] 等於 0,則:
- 從主方法執行以下操作:
- 如果 primes[n] 為奇數,則返回“比馬爾”,否則返回“阿馬爾”。
示例
讓我們看看以下實現以獲得更好的理解:
primes = [0 for i in range(100001)] sieve = [0 for i in range(100001)] for i in range(2, 100000): if sieve[i] == 0: primes[i] = primes[i-1]+1 for j in range(i, 100001, i): sieve[j] = i else: primes[i] = primes[i-1] def solve(n): return "Bimal" if primes[n] % 2 == 0 else "Amal" n = 5 print(solve(n))
輸入
5
輸出
Amal
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP