Description
時間是最難以捉摸的東西,光是測量它們就已經很難了。一般而言,測量時間用一個可重複等時間長度發生的事件來定義最小的時間可測單位。於是Krolia想到了一個測量時間的好方法。
Krolia有一盒火柴,如果把火柴的頭去掉火柴就會變成一樣長的木棍。Krolia知道一根(沒有火柴頭)木棍一端點燃後,整個燃燒會持續x時間。Krolia還可以從兩端同時點燃木棍,這樣燃燒會持續x/2時間。現在Krolia想用這堆火柴來計時,問什麼樣的時間可以被完全精確地計算出。
Input
第一行一個整數T(T<=1000),表示有T組測試資料,每組測試資料行三個整數a,b,x(1<=a,b,x<=10^9)表示要測量a/b,一根火柴的燃燒時間長度是x時間。
Output
一個字串,"YES"或者"NO"表示能或者不能被精確計算。
Sample Input
4
1 1 1
1 2 1
1 4 1
1 5 1
Sample Output
YES
YES
YES
NO
Hint
從一端點燃一根木棍。
從兩端同時點燃一根木棍。
從兩端同時點燃一根木棍的同時,從一端點燃一根木棍。當第一根木棍燃燒殆盡的時候,把剩下的那根木棍的火熄滅。最後把剩下的木棍的兩端同時點燃。
昨天下午的比賽題,一個規律找了很久的題~
題意:給你兩個數x和x/2,問能否表示出a/b,通過找規律可知,如果x是偶數可以將其轉化奇數,然後找到x為奇數的規律:分子a必須可以整除x,b一定可以轉化為2的幾次方的形式。
AC代碼:
#include <iostream>#include<string.h>#include<algorithm>#include<cstdio>#define CLR(arr,val) memset(arr,val,sizeof(arr))using namespace std;int gcd(int a,int b){ while(b) { int temp=a%b; a=b; b=temp; } return a;}void in(int &a){ char ch; while((ch=getchar())<'0'||ch>'9'); for( a=0;ch>='0'&&ch<='9';ch=getchar()) a=a*10+ch-'0';}int main(){ int n; while(~scanf("%d",&n)) { for(int i=0;i!=n;++i) { int a,b,x; in(a),in(b),in(x); int ans=gcd(a,b); a=a/ans; b=b/ans; while(x%2==0) x/=2; int k=b; if(a%x==0){ while(k%2==0) k/=2; if(k==1) puts("YES"); else puts("NO"); } else puts("NO"); } } return 0;}