http://acm.uestc.edu.cn/problem.php?pid=1784&&

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;
}
 				    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值