for(i=1;i<=15000000;i++){ //枚举c for(j=(i<<1);j<=30000000;j+=i){ //枚举a ans[j]+=((j-i)==(j^i)); } }
以上写法跑了8.8s。把循环里的累计答案改成下面这样1.6s就跑完了。
if((j-i)==(j^i)){ ans[j]++; }
求助为什么这一个表达式会造成这么大的区别,居然多用了好几倍的时间。