现在有一架天平,好多种砝码,他们的重量是 w0,w1,w2,... 每种各一个。问用这些砝码能不能表示一个重量为 m 的东西。
Input
单组测试数据。
第一行有两个整数
Output
如果能,输出YES,否则输出NO。
Input示例
3 7
Output示例
YES
样例解释:可以将重物
3
放到一个托盘中,
Solve
注意到所有的砝码除了第一个,其他的质量都是
如果
m≡0modw
,那么说明没有用
1
,可以表达
如果
m≡1modw
,那么
1
用在加的方向上,可以表达
如果
m≡−1modw
,那么
1
用在减的方向上,可以表达
Code
#include <stdio.h>
#include <iostream>
using namespace std;
typedef long long llong;
int
main()
{
llong w, m;
cin >> w >> m;
for (; m != 0LL; )
{
if (m % w == 0)
m /= w;
else if (m % w == 1)
m = (m - 1) / w;
else if (m % w == w - 1)
m = (m + 1) / w;
else break;
}
puts(m ? "NO" : "YES");
return 0;
}