还是一道不错的题的。
思路
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const int maxn=2e5+10;
const ll mod=1e9+7;
ll power(ll a,ll b)
{
ll ans=1;
while(b)
{
if(b&1)
ans=ans*a;
a=a*a;
b>>=1;
}
return ans;
}
int main()
{
ll n;
cin>>n;
ll ans=n*n%mod;
ll a=n,b=n,c=n,d=n;
for(int i=1;i<=32;i++)
{
for(int j=1;j<=32;j++)
{
if(__gcd(i,j)==1)
{
ll aa=power(a,1.0/i);
ll bb=power(c,1.0/j);
while(power(aa,i)<=a)
aa++;
aa--;
while(power(bb,j)<=c)
bb++;
bb--;
ans=(ans+min(aa-1,bb-1)*min((b/i),(d/j))%mod)%mod;
}
}
}
cout<<ans<<endl;
return 0;
}