题目描述

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

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

输入格式

第一行两个正整数 n,k 。

输出格式

第一行输出答案。

样例

输入样例

5 2

输出样例

63

数据范围与提示

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

Solution:

  本题ZYYS。。。

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

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

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

  那么还是考虑优化,我们发现,每个数都能唯一分解,而在求幂时会有重复计算的质因子幂。于是,我们考虑线筛,这样就可以用每个数的最小质因子幂去算它的幂了,那么整个过程只会对$n\leq 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+;
int prime[N+],ans,cnt,n,k,sum[N+];
bool isprime[N+]; il int fast(ll s,ll k){
ll ans=;
while(k){
if(k&)ans=ans*s%mod;
k>>=;
s=s*s%mod;
}
return ans;
} il void init(){
sum[]=;
For(i,,n+) {
if(!isprime[i]) prime[++cnt]=i,sum[i]=fast(i,k);
for(int j=;j<=cnt&&prime[j]*i<=n+;j++){
isprime[prime[j]*i]=;
sum[prime[j]*i]=sum[i]*1ll*sum[prime[j]]%mod;
if(i%prime[j]==)break;
}
}
} int main(){
ios::sync_with_stdio();
cin>>n>>k;
init();
For(i,,n) ans=(ans+1ll*(n/i)*sum[i])%mod;
cout<<ans;
return ;
}

LOJ #124. 除数函数求和 1的更多相关文章

  1. Loj #124. 除数函数求和

    链接:https://loj.ac/problem/124 就是筛一下积性函数. #include<bits/stdc++.h> #define ll long long #define ...

  2. LiberOJ #124. 除数函数求和 【整除分块】

    一.题目 #124. 除数函数求和 二.分析 比较好的一题,首先我们要对题目和样例进行分析,明白题目的意思. 由于对于每一个$d$,它所能整除的数其实都是定的,且数量是$ \lfloor \frac{ ...

  3. Loj #125. 除数函数求和(2)

    link : https://loj.ac/problem/125 分块calc即可. #include<bits/stdc++.h> #define ll long long using ...

  4. loj124 除数函数求和 1

    loj124 除数函数求和 1 https://loj.ac/problem/124 $\sum_{i=1}^n(\sum_{d|i}d^k)=\sum_{i=1}^n(i^k*{\lfloor}{\ ...

  5. loj125 除数函数求和 2

    https://loj.ac/problem/125 $原式=2\sum_{i=1}^n(i^2*{\lfloor}{\frac{n}{i}}{\rfloor})+3\sum_{i=1}^n(i*{\ ...

  6. 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)

    [LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...

  7. Loj #528. 「LibreOJ β Round #4」求和 (莫比乌斯反演)

    题目链接:https://loj.ac/problem/528 题目:给定两个正整数N,M,你需要计算ΣΣu(gcd(i,j))^2 mod 998244353 ,其中i属于[1,N],j属于[1,M ...

  8. LOJ #2058「TJOI / HEOI2016」求和

    不错的推柿子题 LOJ #2058 题意:求$\sum\limits_{i=0}^n\sum\limits_{j=0}^nS(i,j)·2^j·j!$其中$ S(n,m)$是第二类斯特林数 $ Sol ...

  9. BZOJ5291/洛谷P4458/LOJ#2512 [Bjoi2018]链上二次求和 线段树

    原文链接http://www.cnblogs.com/zhouzhendong/p/9031130.html 题目传送门 - LOJ#2512 题目传送门 - 洛谷P4458 题目传送门 - BZOJ ...

随机推荐

  1. redis 过期回调通知

    redis 过期回调通知 背景 在使用redis的过程中,有时我们会遇到这种情景,当key过期的时候,我们需要去重新做一些操作,比如重新生成value等.之前,一直用的是添加一个celery定时任务, ...

  2. Python 初始—(文件操作)

    文件修改,我们可以不用讲一个文件全部都进行读取,然后放入内存,如果文件过大,容易造成内存的 内存溢出问题 因此我们可以便读取边进行修改操作 f=open("old.txt",&qu ...

  3. Java分享笔记:泛型机制的程序演示

    package packA; import java.util.*; public class GenericDemo { public static void main(String[] args) ...

  4. MySQL - Linux下安装

    本安装方式仅对5.7.21版本负责. 下载地址:wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21-linux-glibc2 ...

  5. PHP开发环境搭建一:PHP集成环境XAMPP 的安装与配置

    1. XMAPP简介 XAMPP(Apache+MySQL/MariaDB+PHP+Perl)开头的X代表X-OS,代表可以在任何常见操作系统下使用,包括Windows.Mac.Linux,开源平台. ...

  6. YCM的使用

    YCM大概用来做3件事: (1)自动补全 (2)检查语法 (3)跳转到函数定义 然后涉及到两个关键的文件.vimrc 和 .ycm_extra_conf.py 首先需要正确的配置,在.vimrc中写入 ...

  7. C# 打开帮助文档,打开电脑中其他应用或者文件

    打开帮助文档 System.Diagnostics.Process.Start(Directory.GetCurrentDirectory() + "\\" + "hel ...

  8. python——直方图均衡化

    from PIL import Image from pylab import * from numpy import * def histeq(im,nbr_bins = 256): "& ...

  9. 笔记-mysql-管理及基础操作

    笔记-mysql使用-管理及基础操作 1.      简介 mysql是一个免费的关系型数据库,不过好像被oracle收购了.... 希望它继续免费. 1.1.    相关术语 数据库,表,列,行,冗 ...

  10. java程序——凯撒加密

    古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报: 请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想.程序流程图.源代码.结果截图.   设计思想:输入一个字符串,然后将其中每 ...