题面

洛谷

\(\sigma_0(i)\) 表示\(i\) 的约数个数

求\(S_k(n)=\sum_{i=1}^n\sigma_0(i^k)\mod 2^{64}\)

多测,\(T\le10^4,n,k\le10^{10}\)

题解

令\(f(i)=\sigma_0(i^k)\)首先可以发现几个性质

\[f(1)=1
\]

\[f(p)=k+1
\]

\[f(p^c)=kc+1
\]

\[f(ab)=f(a)f(b),\gcd(a,b)=1
\]

也就是说\(f\)是个积性函数,直接上\(Min\_25\)筛就行了

然后把本题里的\(k\)改成\(2\)和\(3\)就可以水过\(DIVCNT2\)\(DIVCNT3\)

  1. //minamoto
  2. #include<bits/stdc++.h>
  3. #define R register
  4. #define ll unsigned long long
  5. #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
  6. #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
  7. #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
  8. using namespace std;
  9. char buf[1<<21],*p1=buf,*p2=buf;
  10. inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
  11. ll read(){
  12. R ll res,f=1;R char ch;
  13. while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
  14. for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
  15. return res;
  16. }
  17. char sr[1<<21],z[20];int C=-1,Z=0;
  18. inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
  19. void print(R ll x){
  20. if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x;
  21. while(z[++Z]=x%10+48,x/=10);
  22. while(sr[++C]=z[Z],--Z);sr[++C]='\n';
  23. }
  24. const int N=1e5+5;
  25. bitset<N>vis;int p[N],id1[N],id2[N],sqr,m;
  26. ll n,k,lim,tot,w[N<<1],sp[N],g[N<<1],h[N<<1];
  27. void init(int n){
  28. fp(i,2,n){
  29. if(!vis[i])p[++tot]=i;
  30. for(R int j=1;j<=tot&&1ll*i*p[j]<=n;++j){
  31. vis[i*p[j]]=1;
  32. if(i%p[j]==0)break;
  33. }
  34. }lim=tot;
  35. }
  36. ll S(ll x,int y){
  37. if(x<=1||p[y]>x)return 0;
  38. int id=(x<=sqr)?id1[x]:id2[n/x];
  39. ll res=g[id]+h[id]-(k+1)*(y-1);
  40. for(int i=y;i<=tot&&1ll*p[i]*p[i]<=x;++i){
  41. ll tmp=p[i];
  42. for(R int e=1;tmp*p[i]<=x;tmp*=p[i],++e){
  43. id=(x/tmp<=sqr)?id1[x/tmp]:id2[n/(x/tmp)];
  44. res+=S(x/tmp,i+1)*(k*e+1)+k*(e+1)+1;
  45. }
  46. }
  47. return res;
  48. }
  49. void solve(){
  50. n=read(),k=read(),sqr=sqrt(n),m=0;
  51. tot=upper_bound(p+1,p+1+lim,sqr)-p-1;
  52. for(R ll i=1,j;i<=n;i=j+1){
  53. j=n/(n/i),w[++m]=n/i;
  54. w[m]<=sqr?id1[w[m]]=m:id2[n/w[m]]=m;
  55. g[m]=(w[m]-1)*k;
  56. h[m]=(w[m]-1);
  57. }
  58. fp(j,1,tot)for(R int i=1;1ll*p[j]*p[j]<=w[i];++i){
  59. int id=(w[i]/p[j]<=sqr)?id1[w[i]/p[j]]:id2[n/(w[i]/p[j])];
  60. g[i]-=g[id]-(j-1)*k;
  61. h[i]-=h[id]-(j-1);
  62. }
  63. print(S(n,1)+1);
  64. }
  65. int main(){
  66. // freopen("testdata.in","r",stdin);
  67. init(N-5);
  68. int T=read();
  69. while(T--)solve();
  70. return Ot(),0;
  71. }

SP34096 DIVCNTK - Counting Divisors (general)(Min_25筛)的更多相关文章

  1. SP34096 【DIVCNTK - Counting Divisors (general)】

    题目 求 \[\sum_{i=1}^n \sigma(i^k)\] 我们先来设一个函数\(f(i)=\sigma(i^k)\) 根据约数个数定理 \[f(p)=\sigma(p^k)=k+1\] \[ ...

  2. hdu 6069 Counting divisors 公式+区间筛

    比赛的时候把公式扣出来了,,但是没有想到用筛法算公因子,,默默学习一下.. 题解:设n=p1^(c1)p2^{c2}...pm^{cm},n=p​1^​c​1*​​​​p​2​^c​2​​​​...p ...

  3. [SPOJ20174]DIVCNT3 - Counting Divisors (cube):Min_25筛

    分析 首先,STO ywy OTZ,ywy TQL%%%! 说一下这道题用min_25筛怎么做. 容易发现,对于所有质数\(p\),都满足\(f(p)=4\),于是我们就可以直接通过\([1,x]\) ...

  4. 【SPOJ】DIVCNTK min_25筛

    题目大意 给你 \(n,k\),求 \[ S_k(n)=\sum_{i=1}^n\sigma_0(i^k) \] 对 \(2^{64}\) 取模. 题解 一个min_25筛模板题. 令 \(f(n)= ...

  5. DIVCNT2&&3 - Counting Divisors

    DIVCNT2 - Counting Divisors (square) DIVCNT3 - Counting Divisors (cube) 杜教筛 [学习笔记]杜教筛 (其实不算是杜教筛,类似杜教 ...

  6. Min_25 筛小结

    Min_25 筛这个东西,完全理解花了我很长的时间,所以写点东西来记录一些自己的理解. 它能做什么 对于某个数论函数 \(f\),如果满足以下几个条件,那么它就可以用 Min_25 筛来快速求出这个函 ...

  7. 2017 Multi-University Training Contest - Team 4 hdu6069 Counting Divisors

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6069 题目: Counting Divisors Time Limit: 10000/5000 ...

  8. hdu6069 Counting Divisors 晒区间素数

    /** 题目:hdu6069 Counting Divisors 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6069 题意:求[l,r]内所有数的k次方 ...

  9. [SPOJ] DIVCNT2 - Counting Divisors (square) (平方的约数个数前缀和 容斥 卡常)

    题目 vjudge URL:Counting Divisors (square) Let σ0(n)\sigma_0(n)σ0​(n) be the number of positive diviso ...

随机推荐

  1. Excel开发学习笔记:读取xml文件及csv文件

    遇到一个数据处理自动化的问题,于是打算开发一个基于excel的小工具.在业余时间一边自学一边实践,抽空把一些知识写下来以备今后参考,因为走的是盲人摸象的野路子,幼稚与错误请多包涵. ).Split(  ...

  2. 配置docker中免密码SSH

    更换docker国内镜像,使用DaoCloud,特别快 编写Dockerfile文件 FROM ubuntu MAINTAINER ggzone xxx@live.com ENV REFRESHED_ ...

  3. 将Windows下磁盘出现黑色为分配区域变成绿色区域

    在windows下不知什么原因, 有一块磁盘空间F盘就变成了黑色为分配区域. 黑色区域无法用来安装双系统, 网上查阅资料后, 找到了如何将他重新变回绿色区域的2个方法(方法二是自己无意操作成功的). ...

  4. python正则以及collections模块

    正则 一.认识模块  什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是加上.py的后缀,但其实import加载的模块分为四个通用类别 : 1.使用python编写的代码(.p ...

  5. SpringMVC的Date与String互转

    摘要:        项目里经常需要用到日期和String之间的转换,比如后台的Date对象以Json形式返回给前端页面的时候,希望转换为yyyy-MM-dd HH:mm:ss格式的字符串,而前端页面 ...

  6. xcode 编译报错“Cannot create __weak reference in file using manual reference counting”解决办法<转>

    http://blog.csdn.net/ouq68/article/details/51003876 解决方法: Please set ‘Weak References in Manual Reta ...

  7. hadoop再次集群搭建(5)-CDH Install

       登录 http://node1.com:7180/.用户名和密码都是admin.启动服务命令是 service  cloudera-scm-server start 最开始两个页面直接conti ...

  8. 数据库理论-范式(1NF、2NF、3NF)

    范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”. 第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项.(每个属性不可分割)第二范式(2NF)要求数据 ...

  9. [cf557d]Vitaly and Cycle(黑白染色求奇环)

    题目大意:给出一个 n 点 m 边的图,问最少加多少边使其能够存在奇环,加最少边的情况数有多少种. 解题关键:黑白染色求奇环,利用数量分析求解. 奇环:含有奇数个点的环. 二分图不存在奇环.反之亦成立 ...

  10. win10 requireAdministrator设置开机自启动无效的解决方案

    开发了一个wpf程序,需要管理员权限,设置了requireAdministrator 同时需要开机自启动,所以添加了注册表: using (RegistryKey key = Registry.Cur ...