博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Loj #124. 除数函数求和
阅读量:5325 次
发布时间:2019-06-14

本文共 934 字,大约阅读时间需要 3 分钟。

链接:https://loj.ac/problem/124

 

就是筛一下积性函数。

 

#include
#define ll long long#define maxn 10000000#define ha 1000000007using namespace std;int zs[maxn/10],t=0;int low[maxn+5];int f[maxn+5];int mik[maxn+5];bool v[maxn+5];int n,k;inline int ksm(int x,int y){ int an=1; for(;y;y>>=1,x=x*(ll)x%ha) if(y&1) an=an*(ll)x%ha; return an;}inline int add(int x,int y){ x+=y; return x>=ha?x-ha:x; }inline void init(){ low[1]=1,f[1]=1; for(int i=2;i<=n;i++){ if(!v[i]) zs[++t]=i,low[i]=i,mik[i]=ksm(i,k),f[i]=add(mik[i],1); for(int j=1,u;j<=t&&(u=zs[j]*i)<=n;j++){ v[u]=1; if(!(i%zs[j])){ low[u]=low[i]*zs[j]; if(low[i]==i) f[u]=add(f[i]*(ll)mik[zs[j]]%ha,1); else f[u]=f[i/low[i]]*(ll)f[low[u]]%ha; break; } low[u]=zs[j],f[u]=f[i]*(ll)(mik[zs[j]]+1)%ha; } } for(int i=1;i<=n;i++) f[i]=add(f[i],f[i-1]);}int main(){ cin>>n>>k; init(); cout<
<

  

转载于:https://www.cnblogs.com/JYYHH/p/8495953.html

你可能感兴趣的文章
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
windows编程ASCII问题
查看>>
.net webService代理类
查看>>
Code Snippet
查看>>
Node.js Express项目搭建
查看>>
zoj 1232 Adventure of Super Mario
查看>>
Oracle 序列的应用
查看>>
1201 网页基础--JavaScript(DOM)
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
oracle job
查看>>
Redis常用命令
查看>>
XML学习笔记(二)-- DTD格式规范
查看>>
git 的回退
查看>>
IOS开发学习笔记026-UITableView的使用
查看>>
002.文件删除功能
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>