#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int mod=1e9+7;
int t,n,m;
vector<int>v[100010];
int main()
{
cin>>t;
while(t--)
{
cin>>n>>m;
int ans=0;
for(int i=1;i<=m;i++)
{
int dig=0,x=i;
while(x)dig++,x/=2;
int base=1<<dig;
int num=(n-i)/base/i;
int cnt=1ll*num*(1<<dig-__builtin_popcount(i))%mod;
int rev=i^(base-1);
for(int j=i;j+num*base*i<=n-i;j+=i)
if(!(j&i))cnt++;
ans=(ans+1ll*cnt*i%mod*i%mod)%mod;
}
cout<<ans<<endl;
}
return 0;
}
这代码是场上卡常卡过去的,是不是复杂度不对啊?