DIVCNT2 - Counting Divisors (square)

#sub-linear #dirichlet-generating-function

Let \sigma_0(n)σ​0​​(n) be the number of positive divisors of nn.

For example, \sigma_0(1) = 1σ​0​​(1)=1, \sigma_0(2) = 2σ​0​​(2)=2 and \sigma_0(6) = 4σ​0​​(6)=4.

LetS_2(n) = \sum _{i=1}^n \sigma_0(i^2).S​2​​(n)=​i=1​∑​n​​σ​0​​(i​2​​).

Given NN, find S_2(N)S​2​​(N).

Input

First line contains TT (1 \le T \le 100001≤T≤10000), the number of test cases.

Each of the next TT lines contains a single integer NN. (1 \le N \le 10^{12}1≤N≤10​12​​)

Output

For each number NN, output a single line containing S_2(N)S​2​​(N).

Example

Input

512310100

Output

147481194

Explanation for Input

- S_2(3) = \sigma_0(1^2) + \sigma_0(2^2) + \sigma_0(3^2) = 1 + 3 + 3 = 7S​2​​(3)=σ​0​​(1​2​​)+σ​0​​(2​2​​)+σ​0​​(3​2​​)=1+3+3=7

Information

There are 6 Input files.

- Input #1: 1 \le N \le 100001≤N≤10000, TL = 1s.

- Input #2: 1 \le T \le 800,\ 1 \le N \le 10^{8}1≤T≤800, 1≤N≤10​8​​, TL = 20s.

- Input #3: 1 \le T \le 200,\ 1 \le N \le 10^{9}1≤T≤200, 1≤N≤10​9​​, TL = 20s.

- Input #4: 1 \le T \le 40,\ 1 \le N \le 10^{10}1≤T≤40, 1≤N≤10​10​​, TL = 20s.

- Input #5: 1 \le T \le 10,\ 1 \le N \le 10^{11}1≤T≤10, 1≤N≤10​11​​, TL = 20s.

- Input #6: T = 1,\ 1 \le N \le 10^{12}T=1, 1≤N≤10​12​​, TL = 20s.

My C++ solution runs in 5.3 sec. (total time)

Source Limit is 6 KB.

很迷的函数题。

如何求 d(i^2)?

d(i^2)= (2*a1+1)(2*a2+1)(2*a3+1)...(2*ak+1)

我们考虑一下选哪些质因子的集合,上式

=Σ2^|S| *π a[i] ,i属于S

=Σ(p|i)  2^w(p)。

其中w(x)为x的质因子数。

然后发现2^w(x)=Σ(i|x)  μ^2(i)

所以ANS= Σμ^2(i) *Σd(j)  ,其中1<=i<=n,1<=j<=(n/i)。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int zs[10000005],t=0,T,sq[50000005];
int miu[50000005],low[50000005],maxn;
bool v[50000005];
ll d[50000005],n;inline void init(){miu[1]=1,d[1]=1,low[1]=1;for(int i=2;i<=maxn;i++){if(!v[i]) zs[++t]=i,miu[i]=-1,d[i]=2,low[i]=i;for(int j=1,u;j<=t&&(u=zs[j]*i)<=maxn;j++){v[u]=1;if(!(i%zs[j])){low[u]=low[i]*zs[j];if(low[i]==i) d[u]=d[i]+1;else d[u]=d[low[u]]*d[i/low[i]];break;}low[u]=zs[j];d[u]=d[i]<<1;miu[u]=-miu[i];}}for(int i=1;i<=maxn;i++) d[i]+=d[i-1];for(int i=1;i<=maxn;i++) sq[i]=sq[i-1]+miu[i]*miu[i];
}inline ll getsq(ll x){if(x<=maxn) return sq[x];ll an=0;for(int i=1;i*(ll)i<=x;i++){an+=miu[i]*(x/(i*(ll)i));}return an;
}inline ll getd(ll x){if(x<=maxn) return d[x];ll an=0;for(ll i=1,j,now;i<=x;i=j+1){now=x/i,j=x/now;an+=(j-i+1)*now;}return an;
}inline ll query(ll x){ll an=0;for(ll i=1,j,now;i<=x;i=j+1){now=x/i,j=x/now;an+=(getsq(j)-getsq(i-1))*getd(now);}return an;
}int main(){scanf("%d",&T);if(T>800) maxn=1000000;else maxn=50000000;init();while(T--){scanf("%lld",&n);printf("%lld\n",query(n));}return 0;
}

  

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

SPOJ 20713 DIVCNT2 - Counting Divisors (square)相关推荐

  1. [Spoj]Counting Divisors (cube)

    来自FallDream的博客,未经允许,请勿转载,谢谢. 设d(x)表示x的约数个数,求$\sum_{i=1}^{n}d(i^{3})$ There are 5 Input files. - Inpu ...

  2. SP34096 DIVCNTK - Counting Divisors (general)(Min_25筛)

    题面 洛谷 \(\sigma_0(i)\) 表示\(i\) 的约数个数 求\(S_k(n)=\sum_{i=1}^n\sigma_0(i^k)\mod 2^{64}\) 多测,\(T\le10^4,n ...

  3. Counting Divisors HDU - 6069

    设n=p_1^{c_1}p_2^{c_2}...p_m^{c_m}n=p​1​c​1​​​​p​2​c​2​​​​...p​m​c​m​​​​,则d(n^k)=(kc_1+1)(kc_2+1)...( ...

  4. 【线性筛】【质因数分解】【约数个数定理】hdu6069 Counting Divisors

    d(x)表示x的约数个数,让你求(l,r<=10^12,r-l<=10^6,k<=10^7) #include<cstdio> using namespace std; ...

  5. 【SP26073】DIVCNT1 - Counting Divisors 题解

    题目描述 定义 \(d(n)\) 为 \(n\) 的正因数的个数,比如 \(d(2) = 2, d(6) = 4\). 令 $ S_1(n) = \sum_{i=1}^n d(i) $ 给定 \(n\ ...

  6. 2017 Multi-University Training Contest - Team 4:1003. Counting Divisors(积性函数)

    公式: 上面的a|b表示a是b的约数,ai是每个质因数p分解后的项数 枚举每个x(l<=x<=r) 对于每个数暴力分解小于sqrt(r)的质数就好了, 因为大于sqrt(r)的质数最多只有 ...

  7. 浅谈积性函数求前缀和

    转载至https://blog.csdn.net/skywalkert/article/details/50500009 前置技能 积性函数的定义 若f(n)f(n)的定义域为正整数域,值域为复数,即 ...

  8. 知识点 - 数论函数导论

    知识点 - 数论进阶 abstract:整除分块,积性函数,线性筛,莫比乌斯反演,迪利克雷卷积,积性函数前缀和,杜教筛,阁洲筛,min_25筛 0.引入 Gym - 101485D debugging ...

  9. 浅谈一类积性函数的前缀和(转载)

    本文转自:http://blog.csdn.net/skywalkert/article/details/50500009 另外,莫比乌斯反演和杜教筛其他可转到 http://blog.leanote ...

最新文章

  1. 结构体中定义函数指针
  2. 【iOS-cocos2d-X 游戏开发之十四】cocos2dx(c++)中访问object函数
  3. easyexcel工具类_阿里巴巴程序员常用的 15 款开发者工具
  4. 带你进入高级测试实验室,
  5. c语言指针指向字符串单个,C语言 有没有可能调用一个指向字符串的函数指针?...
  6. 在linux上实现cgi内容在网页上显示
  7. OpenGL CPU射线行进
  8. /hgfs下无共享文件夹?/mnt下没有hgfs文件夹?vmhgfs-fuse:找不到命令?
  9. mysql引擎inndbmmyisam_Mysql中MyISAM引擎和InnoDB引擎的比较
  10. Java 解决采集UTF-8网页空格变成问号乱码
  11. java输出1-100内的所有5的倍数,5个一行
  12. MongoDB 快速入门实战教程最新版
  13. 傲娇Android二三事之诡诡异异的图片加载
  14. python 拼音搜索中文_JS实现输入拼音搜索中文列表
  15. oligo包常用函数
  16. 计算机mac地址怎么修改密码,苹果电脑怎么修改MAC地址|苹果电脑修改MAC地址的方法...
  17. java https pfx_使用HttpClient携带pfx证书调用HTTPS协议的WebService
  18. Pathon简介和优势
  19. 邮箱发信量到达上限,发不出邮件,你知道该怎么办吗?
  20. java计算机毕业设计个人交友网站源码+数据库+系统+lw文档+mybatis+运行部署

热门文章

  1. ubuntu 安装redis两种方式 教程
  2. 初入c++(七)运算符的重载+、-、*、/、[]、自加++的重载
  3. u-boot移植随笔:u-boot shell与ASCII码
  4. PLSQL没有链接为解决办法
  5. 【kafka】kafka 消息头的强大功能
  6. 【算法】剑指 Offer 36. 二叉搜索树与双向链表
  7. 95-910-330-源码-FlinkSQL-Calcite-Flink结合Calcite
  8. 【SpringCloud】服务注册之 zookeeper
  9. 【Java】Java 线程池 8 大拒绝策略
  10. 【janino】janino自定义函数报错A method named xx is not declared in any enclosing class nor through a static