问一个数(小于等于10e18,不管了,要log N才可以)
可否表示成这样:
3^(a1)+3^(a2)+3^(a3)+……+3^(an)
a各不相同,大于等于0的整数
(像2就不行,2=3^0+3^0,重复了)
以下,鄙人代码,可能有问题:
#include<bits/stdc++.h>
using namespace std;
map<long long,short>ma;
bool dfs(long long now){
if(now==0){
return 1;
}
if(ma[now]!=0){
return ma[now]==1;
}
if(now%3==1){
now--;
}
if(now%3!=0){
ma[now]=-1;
return false;
}
ma[now]=dfs(now/3);
return ma[now]==1;
}
int main(){
int t;
cin>>t;
while(t--){
long long n;
cin>>n;
if(n%3==1){
n--;
}
if(n%3!=0){
ma[n]=-1;
printf("NO\n");
}
if(dfs(n)==1){
printf("YES\n");
}else{
printf("NO\n");
}
}
//system("pause");
}
t<=1000,n<=1e18