zoukankan      html  css  js  c++  java
  • [hdu5608]function

    题意:$sum_{d|n}f(d)=n^{2}-3n+2$,求$sum_{i=1}^{n}f(i)mod 10^{9}+7$ , $n leqslant 10^{9}$ $left( T leqslant 500 ight)$组数据,只有5组>$10^{6}$

    题解:看了式子感觉像是反演,但是呢....

    令$S(n)=sum_{i=1}^{n}f(i)$

    那么$S(n)=sum_{i=1}^{n}sum_{d|i}f(d)=sum_{i=1}^{n}f(d)lfloorfrac{n}{d} floor=sum_{d=1}^{n}sum_{i=1}^{lfloorfrac{n}{d} floor} f(d)=sum_{d=1}^{n}S(lfloorfrac{n}{d} floor)=sum_{i=1}^{n}(i-1)*(i-2)$

    所以$S(n)=frac{n*(n-1)*(n-2)}{3}-sum_{i=2}^{n}f(i)$

    所以老套路,预处理$maxn^{frac{2}{3}}$的S(i),这个可以直接算,总复杂度也是$O(n^{frac{2}{3}})$

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<map>
    #define MAXN 5000000
    #define mod 1000000007
    #define inv 333333336
    #define ll long long
    using namespace std;
    inline ll read()
    {
        ll x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}
        return x*f;
    }
    
    int f[MAXN+5];
    map<int,ll> mp;
    
    ll calc(int x)
    {
        if(x<=MAXN)return f[x];
        map<int,ll>::iterator it;
        if((it=mp.find(x))!=mp.end())return it->second;
        ll sum=1LL*x*(x-1)%mod*(x-2)%mod*inv%mod;
        int last;
        for(int i=2;i<=x;i=last+1)
        {
            last=x/(x/i);
            sum-=1LL*(last-i+1)*calc(x/i);
            while(sum<0)sum+=mod;
        }
        return (mp[x]=sum);
    }
    
    int main()
    {
        for(int i=1;i<=MAXN;i++)
            f[i]=1LL*(i-2)*(i-1)%mod;
        for(int i=1;i<=MAXN;i++)
            for(int j=i<<1;j<=MAXN;j+=i)
                f[j]=(f[j]-f[i]+mod)%mod;
       // for(int i=1;i<=10;i++)cout<<f[i]<<endl;
        for(int i=2;i<=MAXN;i++) f[i]=(f[i]+f[i-1])%mod;
        for(int t=read();t;t--)
            printf("%lld
    ",calc(read()));
        return 0;
    }
  • 相关阅读:
    layoutSubviews总结
    Vue.js:循环语句
    Vue.js:条件与循环
    Vue.js:模版语法
    Vue.js:起步
    Vue.js-Runoob:目标结构
    Vue.js-Runoob:安装
    Runoob-Vue.js:教程
    Vue.js:template
    培训-Alypay-Cloud:蚂蚁金融云知识点
  • 原文地址:https://www.cnblogs.com/FallDream/p/hdu5608.html
Copyright © 2011-2022 走看看