题面

洛谷

\(\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\)

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll unsigned long long
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
ll read(){
R ll res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res;
}
char sr[1<<21],z[20];int C=-1,Z=0;
inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
void print(R ll x){
if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x;
while(z[++Z]=x%10+48,x/=10);
while(sr[++C]=z[Z],--Z);sr[++C]='\n';
}
const int N=1e5+5;
bitset<N>vis;int p[N],id1[N],id2[N],sqr,m;
ll n,k,lim,tot,w[N<<1],sp[N],g[N<<1],h[N<<1];
void init(int n){
fp(i,2,n){
if(!vis[i])p[++tot]=i;
for(R int j=1;j<=tot&&1ll*i*p[j]<=n;++j){
vis[i*p[j]]=1;
if(i%p[j]==0)break;
}
}lim=tot;
}
ll S(ll x,int y){
if(x<=1||p[y]>x)return 0;
int id=(x<=sqr)?id1[x]:id2[n/x];
ll res=g[id]+h[id]-(k+1)*(y-1);
for(int i=y;i<=tot&&1ll*p[i]*p[i]<=x;++i){
ll tmp=p[i];
for(R int e=1;tmp*p[i]<=x;tmp*=p[i],++e){
id=(x/tmp<=sqr)?id1[x/tmp]:id2[n/(x/tmp)];
res+=S(x/tmp,i+1)*(k*e+1)+k*(e+1)+1;
}
}
return res;
}
void solve(){
n=read(),k=read(),sqr=sqrt(n),m=0;
tot=upper_bound(p+1,p+1+lim,sqr)-p-1;
for(R ll i=1,j;i<=n;i=j+1){
j=n/(n/i),w[++m]=n/i;
w[m]<=sqr?id1[w[m]]=m:id2[n/w[m]]=m;
g[m]=(w[m]-1)*k;
h[m]=(w[m]-1);
}
fp(j,1,tot)for(R int i=1;1ll*p[j]*p[j]<=w[i];++i){
int id=(w[i]/p[j]<=sqr)?id1[w[i]/p[j]]:id2[n/(w[i]/p[j])];
g[i]-=g[id]-(j-1)*k;
h[i]-=h[id]-(j-1);
}
print(S(n,1)+1);
}
int main(){
// freopen("testdata.in","r",stdin);
init(N-5);
int T=read();
while(T--)solve();
return Ot(),0;
}

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. 【转】bootstrap模态框(modal)使用remote方法加载数据,只能加载一次的解决办法

    http://blog.csdn.net/coolcaosj/article/details/38369787 bootstrap的modal中,有一个remote选项,可以动态加载页面到modal- ...

  2. select *和select 全部

    select *和select 全部字段 在查询上效果是一样的,速度也是一样的. 不过理论上来说select *反而会快点. 因为 1.select 全部字段在数据传输上消耗会更多,如果几百个字段这个 ...

  3. 2015广州强网杯(Misc)

    单身狗: 下载图片 被一只狗挡住了的二维码,用图片处理软件把上面两个正方形随便一个覆盖狗的地方 我直接用美图秀秀处理一下,扫一下就得到flag

  4. js常见的字符串及数组处理

    最近工作设计前台比较多,由于好久没动前台,或者使用前台框架习惯了,js有点生,将常见的字符串处理忘了,在这里整理一下常见的,以便于查阅: 1.substr():字符串分割,第一个是开始的下标,第二个是 ...

  5. 在IDEA 中用maven创建web项目

    安装Maven 下载安装 去maven官网下载最新版. 解压到安装目录. 配置 右键桌面的计算机图标,属性–>高级系统设置–>环境变量,添加M2_HOME的环境变量,然后将该变量加入的PA ...

  6. SpringBoot12 QueryDSL02之利用QueryDSL实现多表关联查询

    1 业务需求 有的系统业务逻辑比较复杂,存在着多表关联查询的的情况,查询的内容不仅仅是单张表的的内容而是多张表的字段组合而成的,直接使用SplringDataJPA实现是比较复杂的,但是如果使用Que ...

  7. JavaScipt——Windows.document对象

    四中选择器:class ,id , name , 标签 通过选择器获取对象: document.getElementById('');  -- id选择器 ...................... ...

  8. 算法Sedgewick第四版-第1章基础-007一用两个栈实现简单的编译器

    1. package algorithms.util; import algorithms.ADT.Stack; /****************************************** ...

  9. JavaPersistenceWithHibernate第二版笔记-第七章-003Mapping an identifier bag(@OrderColumn、@ElementCollection、@CollectionTable、、)

    一.结构 二.代码 1. package org.jpwh.model.collections.listofstrings; import org.jpwh.model.Constants; impo ...

  10. R: plot 绘图各种参数,以及 legend。。

    ################################################### 问题:基础绘图plot   18.4.30 plot函数,基础绘图的各个参数? 解决方案: ca ...