題目背景
roy和october兩人在玩乙個取石子的遊戲。
題目描述
遊戲規則是這樣的:共有n個石子,兩人每次都只能取p^k個(p為質數,k為自然數,且p^k小於等於當前剩餘石子數),誰取走最後乙個石子,誰就贏了。
現在october先取,問她有沒有必勝策略。
若她有必勝策略,輸出一行」october wins!」;否則輸出一行」roy wins!」。
輸入輸出格式
輸入格式:
第一行乙個正整數t,表示測試點組數。
第2行~第(t+1)行,一行乙個正整數n,表示石子個數。
輸出格式:
t行,每行分別為」october wins!」或」roy wins!」。
輸入輸出樣例
輸入樣例#1:
3 4
9 14
輸出樣例#1:
october wins!
october wins!
october wins!
說明對於30%的資料,1<=n<=30;
對於60%的資料,1<=n<=1,000,000;
對於100%的資料,1<=n<=50,000,000,1<=t<=100,000。
分析:
被xjh拉去做比賽。然後就去**。這道題顯然,1,2,3,4,5是先手贏狀態,6無論怎麼選都不行,就是乙個後手狀態,以此類推,我們發現,如果先手能夠一步拿到任何乙個後手狀態,就可以贏,然後我們發現每乙個後手狀態都是6k。
證明:
假設現在數為6k,我們已經證明出6a(a<k)為後手狀態,那麼要想拿出後手狀態,顯然要拿走6(k-a),而6(k-a)一定不是乙個質數的乘方,分解質因數會有乙個2和乙個3,顯然不可能。而且,假設先手拿走了數表示為6x+y(0<y<6,不為0,已證明),後手可以通過拿走6-y使得現在的數成為6的倍數,且小於原數。
**:
var
n,t,i:longint;
begin
readln(t);
for i:=1
to t do
begin
readln(n);
if n mod
6=0then writeln('roy wins!')
else writeln('october wins!');
end;
end.
取石子遊戲
如下 include include intmain k b a temp floor k 1.0 sqrt 5 2.0 if temp a printf 0 n else printf 1 n return 0 一 巴什博奕 bash game 只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每...
取石子問題
xiao tang和xiao jiang非常喜歡玩一種有趣的小遊戲 有n個石子,兩人輪流從中取出1個,3個或4個石子,當石子被取空時,遊戲結束。最後乙個取石子的人獲勝,第一次總是xiao tang取.當然,他們倆都足夠聰明,總會採取最優的策略。input 每行會有乙個正整數n n 100000 代表...
取石子問題
有一種很有意思的遊戲,就是有物體若干堆,可以是火柴棍或是圍棋子等等均可。兩個人輪流從堆中取物體若干,規定最後取光物體者取勝。這是我國民間很古老的乙個遊戲,別看這遊戲極其簡單,卻蘊含著深刻的數學原理。下面我們來分析一下要如何才能夠取勝。一 巴什博奕 bash game 只有一堆n個物品,兩個人輪流從這...