先暴力打出来前100个然后找规律
#include<bits/stdc++.h>
using namespace std;
#define int long long
int T;
int x;
signed main(){
//cin>>T;
for(int i=1;i<=100;i++){
x=i;
int ans=0;
for(int i=2;i<=x;i++)ans|=x%i;
cout<<ans<<endl;
}
}
0
0
1
1
3
3
3
3
7
7
7
7
7
7
7
7
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
63
发现规律就是2的n次方个2的n次方
然后写出代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int T;
int x;
int a[41];
int sum[41];
signed main(){
a[0]=1;
sum[0]=1;
for(int i=1;i<=39;i++)a[i]=a[i-1]*2 , sum[i]=sum[i-1]+a[i];
cin>>T;
while(T--){
cin>>x;
if(x==1||x==2)cout<<"0"<<endl;
else{
x--;
for(int i=1;i<=39;i++){
if(x<=sum[i]){
cout<<a[i]-1<<endl;
break;
}
}
}
}
}
本文揭示了通过暴力计算前100个数的模式,发现答案呈现2的幂次方规律。作者进一步利用此规律,优化代码实现,展示了如何使用递推计算得到每个数的对应值。
4234

被折叠的 条评论
为什么被折叠?



