(一)
相當於問你能否將 \(m\) 拆成奇特的 \(n\) 進位制是每一位是 \(1\) 或 \(0\) 或 \(-1\)。
然後就用這題的方法拆分。
-
先對 \(n\) 取餘。
-
如果餘 \(0\),直接繼續。
-
如果餘 \(1\),\(m=m-1\)。
-
如果餘 \(-1\),\(m=m+1\)。
-
否則,輸出 NO。
-
-
換下一位:\(m=m\div n\)。
(二)
AC 程式碼。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
signed main(){
scanf("%lld%lld",&n,&m);
if(n==2){
puts("YES");
return 0;
}
while(m>0){
int p=m%n;
if(p==1){
m--;
}
else if(p==n-1){
m++;
}
else if(p!=0){
puts("NO");
return 0;
}
m/=n;
}
puts("YES");
return 0;
}