zoukankan      html  css  js  c++  java
  • LOJ #124. 除数函数求和 1

    题目描述

    $sigma_k(n) = sum_{d | n} d ^ k$

    求 $sum_{i=1}^nsigma_k(i)$ 的值对 109 取模的结果。

     

    输入格式

    第一行两个正整数 n,k

     

    输出格式

    第一行输出答案。

     

    样例

    输入样例

    5 2

    输出样例

    63

     

    数据范围与提示

    对于 100% 的数据,1≤n,k≤1077​​ 。

    Solution:

      本题ZYYS。。。

      直接枚举显然不行,我们考虑改为求$n$的某一因子$d$在整个函数中的贡献是多少。

      套上数论分块的思想,一个因子$d$对式子的贡献是$lfloor{frac{n}{d}} floor imes d^k$。

      这样我们需要处理的就是$d^k$,直接$O(nlog k)$快速幂求出每个因子的幂是肯定不行的,因为$n$是$10^7$,直接会T。

      那么还是考虑优化,我们发现,每个数都能唯一分解,而在求幂时会有重复计算的质因子幂。于是,我们考虑线筛,这样就可以用每个数的最小质因子幂去算它的幂了,那么整个过程只会对$nleq 10^7$内的质数进行快速幂,最后复杂度就成了$sqrt n log k$,完全可行。

      所以最后就只需再$O(n)$扫一遍因子累加贡献求和就好了。

    代码:

    #include<iostream>
    #define il inline
    #define ll long long
    #define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
    #define Bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--)
    #define Max(a,b) ((a)>(b)?(a):(b))
    #define Min(a,b) ((a)>(b)?(b):(a))
    
    using namespace std;
    const int N=1e7,mod=1e9+7;
    int prime[N+5],ans,cnt,n,k,sum[N+5];
    bool isprime[N+5];
    
    il int fast(ll s,ll k){
        ll ans=1;
        while(k){
            if(k&1)ans=ans*s%mod;
            k>>=1;
            s=s*s%mod;
        }
        return ans;
    }
    
    il void init(){
        sum[1]=1;
        For(i,2,n+1) {
            if(!isprime[i]) prime[++cnt]=i,sum[i]=fast(i,k);
            for(int j=1;j<=cnt&&prime[j]*i<=n+1;j++){
                isprime[prime[j]*i]=1;
                sum[prime[j]*i]=sum[i]*1ll*sum[prime[j]]%mod;
                if(i%prime[j]==0)break;
            }
        }
    }
    
    int main(){
        ios::sync_with_stdio(0);
        cin>>n>>k;
        init();
        For(i,1,n) ans=(ans+1ll*(n/i)*sum[i])%mod;
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    自动化运维之日志系统ES+Kibana展示(二)
    自动化运维之日志系统ElasticSearch篇(一)
    Zabbix应用监控系列之Redis状态监控
    zabbix监控tomcat
    Dynamic CRM2016在一台本地服务器安装部署
    windows server 2012r2 中文输入法不能使用
    microsoft dynamic CRM2016安装时报错组件未安装
    Linux RHCE 文件,目录和帮助(转)
    Linux系统管理员的命令行工具箱目录(转)
    linux本地用户和组的管理(转)
  • 原文地址:https://www.cnblogs.com/five20/p/9226187.html
Copyright © 2011-2022 走看看