HDU-4059 The Boss on Mars(反演)


HDU-4059 The Boss on Mars







#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
const int inv=233333335;
typedef long long ll;
ll f(ll n){
    ll ans=n*(n+1)%mod*(2LL*n+1)%mod;
    ll x=(3LL*n*n%mod+3LL*n-1)%mod*inv%mod;
    return ans*x%mod;
}
int mu(ll n){
    if(n==1)return 1;
    int cnt=0;
    for(int i=2;1LL*i*i<=n;i++){
        if(n%i==0){
            cnt++;
            n/=i;
            if(n%i==0)return 0;
        }
    }
    if(n>1)cnt++;
    return cnt%2==1?-1:1;
}
ll cal(ll n,ll d){
    ll res=d*d%mod;
    res=res*res%mod;
    ll ans=f(n/d)*res%mod*mu(d);
    ans=(ans+mod)%mod;
    return ans;
}
int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        scanf("%d",&n);
        ll ans=0;
        for(int i=1;1LL*i*i<=n;i++){
            if(n%i==0){
                ans+=cal(n,i);
                if(ans>=mod)ans-=ans/mod*mod;
                if(i!=n/i)ans+=cal(n,n/i);            
                if(ans>=mod)ans-=ans/mod*mod;
            }
        }
        printf("%lld\n",ans);
    }    
}

全部评论

相关推荐

服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
牛客154160166号:9月底还给我发短信,好奇怪,我24届的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务