code
简化后的代码如下:
int n,pw[21];
bool vis[14348907];
int getbit(int x,int k){return (x/pw[k])%3;}
int main(){
for(int i=pw[0]=1;i<=18;i++) pw[i]=pw[i-1]*3;
for(int i=0;i<pw[n];i++){
if(!vis[i]) continue;
for(int j=0;j<n;j++){
if(!getbit(i,j)) vis[i+pw[j]]=1,vis[i+pw[j]*2]=1;
}
}
return 0;
}
没开 -O2 之前能过,开了之后显示 getbit(i,j) 浮点数运算错误(估计是除以 0),gdb 调试的时候显示 j = <optimized out>,那么是什么地方出问题了呢?