Loj #124. 除数函数求和
链接:https://loj.ac/problem/124
就是筛一下积性函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include<bits/stdc++.h> #define ll long long #define maxn 10000000 #define ha 1000000007 using 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<<f[n]<<endl; return 0; } |
我爱学习,学习使我快乐
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入
· .NET 开发的分流抢票软件,不做广告、不收集隐私
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 实现windows下简单的自动化窗口管理
· 前端实现 HTML 网页转 PDF 并导出