1905: 小火山的跳子游戲
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 462 Solved: 107
SubmitStatusWeb Board
Description
小火山和火山火山在一塊玩跳子游戲。規則如下:
1:跳子的起始位置爲0,棋盤大小從1到N
2:每次跳子跳k步。 例如當前位置爲i, 那麼下一步爲i + k
3:跳子過程中,碰到1或N則往回跳。例如當前位置爲4, N = 6, K = 5的
時候, 那麼下次跳子, 應該是 5, 6, 5 ,4, 3。最後落在3的位置, 再一次
跳子爲2 1 2 3 4。最後落在4的位置;
現在小火山想知道經過任意次跳子最後能否將這個棋盤上的每個數字都走過。
Input
輸入第一行是一個整數T(T <= 20000), 表示一共有T組數據。
每一組數據都有兩個整數N, K(1 <= K ,N <= 5000)
Output
對於每組數據,如果可以將這個棋盤上的每個數字都走過則輸出"Yes", 否則輸出"No"
Sample Input
26 42 1
Sample Output
No
Yes
HINT
最開始想到的就是GCD,畫了個圓但是畫到重複點是以爲方向不重要,感覺只要重複出現不論是去還是返回無所謂的。但其實不是,方向不同還是不同的點。相當於一個2n-2個點每次走k個點問能否每個點都走過。這跟HDU1222那個題一樣了。判斷是否互質的問題。與其說太粗心還不如說是做題少。
#include<stdio.h>
int gcd(int a,int b)
{
if(a%b==0)
return b;
else
return(gcd(b,a%b));
}
int main()
{
int t,n,k;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
if(gcd(2*n-2,k)==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}