这题首先要会线性筛约数个数,并求出前缀和

bool vis[maxn];
int mm,mu[maxn],prime[maxn],num[maxn],sum[maxn],d[maxn],sum1[maxn];
void init(){
mu[]=;num[]=;
for(int i=;i<maxn;i++){
if(!vis[i]){
prime[++mm]=i;
mu[i]=-;
num[i]=;
d[i]=;
}
for(int j=;j<=mm;j++){
if(prime[j]*i>=maxn)break;
vis[i*prime[j]]=;
if(i%prime[j]==){
mu[i*prime[j]]=;
d[i*prime[j]]=d[i]+;
num[i*prime[j]]=num[i]/(d[i]+)*(d[i*prime[j]]+);
break;
}
else {
mu[i*prime[j]]=-mu[i];
d[i*prime[j]]=;
num[i*prime[j]]=num[i]*;
}
}
}
for(int i=;i<maxn;i++)sum[i]=sum[i-]+mu[i];
for(int i=;i<maxn;i++)sum1[i]=sum1[i-]+num[i];
}

然后通过转化 d(i*j) 化简原式即可

#include<bits/stdc++.h>
using namespace std;
#define maxn 500005
#define ll long long bool vis[maxn];
int mm,mu[maxn],prime[maxn],num[maxn],sum[maxn],d[maxn],sum1[maxn];
void init(){
mu[]=;num[]=;
for(int i=;i<maxn;i++){
if(!vis[i]){
prime[++mm]=i;
mu[i]=-;
num[i]=;
d[i]=;
}
for(int j=;j<=mm;j++){
if(prime[j]*i>=maxn)break;
vis[i*prime[j]]=;
if(i%prime[j]==){
mu[i*prime[j]]=;
d[i*prime[j]]=d[i]+;
num[i*prime[j]]=num[i]/(d[i]+)*(d[i*prime[j]]+);
break;
}
else {
mu[i*prime[j]]=-mu[i];
d[i*prime[j]]=;
num[i*prime[j]]=num[i]*;
}
}
}
for(int i=;i<maxn;i++)sum[i]=sum[i-]+mu[i];
for(int i=;i<maxn;i++)sum1[i]=sum1[i-]+num[i];
}
ll n,m; inline ll calc(ll n,ll m){return (ll)sum1[n]*sum1[m];} int main(){
init();
int t;cin>>t;
while(t--){
cin>>n>>m;
if(n>m)swap(n,m);
ll ans=;
for(int l=,r;l<=n;l=r+){
r=min(n/(n/l),m/(m/l));
ans+=(sum[r]-sum[l-])*calc(n/l,m/l);
}
cout<<ans<<'\n';
}
}

约数个数求和+线性筛约数——bzoj3994的更多相关文章

  1. BZOJ 3994: [SDOI2015]约数个数和3994: [SDOI2015]约数个数和 莫比乌斯反演

    https://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://blog.csdn.net/qq_36808030/article/deta ...

  2. luogu3327 [SDOI2015]约数个数和

    link 设\(d(x)\)表示x约数个数,给定n,m,\(\sum_{i=1}^n\sum_{j=1}^md(ij)\) 多组询问,1<=T<=50000,1<=N, M<= ...

  3. [SDOI2015][bzoj 3994][Luogu P3327] 约数个数和 (莫比乌斯反演)

    题目描述 设d(x)d(x)d(x)为xxx的约数个数,给定NNN.MMM,求 ∑i=1N∑j=1Md(ij)\sum^{N}_{i=1}\sum^{M}_{j=1} d(ij)i=1∑N​j=1∑M ...

  4. 牛客:t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数(数论+贪心)

    https://ac.nowcoder.com/acm/contest/907/B t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数 分析: 根据约数和定理:对于一个大于1正整数 ...

  5. SIEVE 线性筛

    今天来玩玩筛 英文:Sieve 有什么筛? 这里介绍:素数筛,欧拉筛,约数个数筛,约数和筛 为什么要用筛? 顾名思义,筛就是要漏掉没用的,留下有用的.最终筛出来1~n的数的一些信息. 为什么要用线性筛 ...

  6. 【数论】【莫比乌斯反演】【线性筛】hdu6134 Battlestation Operational

    看这个题解吧:http://blog.csdn.net/wubaizhe/article/details/77338332 代码里顺便把几个常用的线性筛附上了. Key:1.gcd(i,j)==1利用 ...

  7. BZOJ5323 JXOI2018游戏(线性筛+组合数学)

    可以发现这个过程非常类似埃氏筛,将在该区间内没有约数的数定义为质数,那么也就是求每种方案中选完所有质数的最早时间之和. 于是先求出上述定义中的质数个数,线性筛即可.然后对每个最短时间求方案数,非常显然 ...

  8. 积性函数&线性筛&欧拉函数&莫比乌斯函数&因数个数&约数个数和

    只会搬运YL巨巨的博客 积性函数 定义 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数. 完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数 ...

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

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

随机推荐

  1. 数组循环移动 空间复杂度O(1)

    ---恢复内容开始--- 题目大意: 输入元素个数,输入数组,输入右移步数,输出结果: 基本思路: 可以把数组(从下标为0开始存储)看成两部分,分别是[0,n-step-1],[n-step,n-1] ...

  2. date -d 对于时间的控制

    [root@ ~]# date "+%Y"2019[root@ ~]# date "+%Y%m%d"20190826 [root@localhost ~]# d ...

  3. 在SpringCloud中MAVEN配置文件中的更改

    <mirrors> <mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> ...

  4. AcWing 160. 匹配统计 (哈希+二分) 打卡

    阿轩在纸上写了两个字符串,分别记为A和B. 利用在数据结构与算法课上学到的知识,他很容易地求出了“字符串A从任意位置开始的后缀子串”与“字符串B”匹配的长度. 不过阿轩是一个勤学好问的同学,他向你提出 ...

  5. 三:robotframework框架配合selenium之jquery定位

    RF框架我用的比较多,限于自己的代码水平,目前工作中一直是用RF框架.unittest框架,我也练习了很久,还差一点封装的技巧与设计模式的学习.所以不敢在项目中实践. 等明年我的代码水平再上升一个台阶 ...

  6. 虚拟机安装(Cent OS)

    转载:http://www.cnblogs.com/kkdd-2013/p/3973807.html 0 前言 本篇主要介绍在虚拟机VMware上安装CentOS6.5的过程,并且在自己电脑上安装成功 ...

  7. JAVA JDBC大数据量导入Mysql

    转自https://blog.csdn.net/q6834850/article/details/73726707?tdsourcetag=s_pctim_aiomsg 采用JDBC批处理(开启事务. ...

  8. 【linux】netlink

    Netlink实现网卡上下线监控 https://blog.csdn.net/sourthstar/article/details/7975999

  9. 在Windows上安装部署Cuckoo

    1. Cuckoo使用的第三方工具及库 Yara:http://plusvic.github.io/yara/ Pydeep:https://github.com/kbandla/pydeep Yar ...

  10. plsql连接问题

    PLsql好久没用了,今天想用的时候,发现自己忘记本地实例(system)的密码了,试了几个自己常用的密码都不对,提示“ORA-01017:invalid username/password;logo ...