http://www.lydsy.com/JudgeOnline/problem.php?id=3994

设d(x)为x的约数个数,给定N、M,求

用到的一个结论:

证明:

枚举n的约数i,枚举m的约数j

那么i*j一定是n*m的约数

d(nm)相当于不同的i*j 的个数

若i, j 不互质

设gcd(i,j)= g , 则 i= p*g ,j=q*g

那么i*j 可以 组成两个互质数p*g*g 和 q 的乘积

p*g*g 和 q 也都输n和m的约数

即p*g*g 和 q 也都是合法的i,j

所以 互质数i和j的乘积组成了n*m的所有的约数

上式得证

回到这个题

令N<=M

化为

改变枚举顺序,先枚举i,j

当n=[1,N]中所有i的倍数时,i会取n/i次

即i会取 次    ( 里面有除号的[]表示下取整,下面一样)

j 同理

所以 上式化为

=  

=

改变枚举顺序,先枚举d

令 

ans=

f(x) 可以 用除法分块 提前 N*sqrt(N)处理好

预处理 μ 的前缀和

最后的式子 也可以用除法分块 在sqrt(N)时间内计算出

#include<cstdio>
#include<iostream>
#include<algorithm>using namespace std;#define N 50001typedef long long LL;int prime[N];
bool vis[N];
int miu[N],sum[N];LL f[N];void read(int &x)
{x=0; char c=getchar();while(!isdigit(c)) c=getchar();while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }
}void premiu()
{int cnt=0;miu[1]=1;for(int i=2;i<N;++i){if(!vis[i]){prime[++cnt]=i;miu[i]=-1;}for(int j=1;j<=cnt;++j){if(prime[j]*i>=N) break;vis[i*prime[j]]=true;if(i%prime[j]==0) break;miu[i*prime[j]]=-miu[i];}}for(int i=1;i<N;++i) sum[i]+=sum[i-1]+miu[i];
}LL pref(int x)
{LL tot=0;int j;for(int i=1;i<=x;i=j+1){j=x/(x/i);tot+=(LL)(j-i+1)*(x/i);}return tot;
}int main()
{premiu();for(int i=1;i<N;++i) f[i]=pref(i);int T,n,m,j;LL ans; read(T);while(T--){ans=0;read(n); read(m);if(n>m) swap(n,m);for(int i=1;i<=n;i=j+1){j=min(n/(n/i),m/(m/i));ans+=f[n/i]*f[m/i]*(sum[j]-sum[i-1]);} cout<<ans<<'\n';}
}

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8228465.html

bzoj千题计划203:bzoj3994: [SDOI2015]约数个数和相关推荐

  1. [BZOJ3994][SDOI2015]约数个数和

    3994: [SDOI2015]约数个数和 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1104  Solved: 762 [Submit][St ...

  2. [bzoj3994] [SDOI2015]约数个数和

    Description 设d(x)为x的约数个数,给定N.M,求 \(\sum_{i=1}^N\sum_{j=1}^Md(ij)\) Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测 ...

  3. BZOJ 2150. 部落战争(最小路径覆盖问题)【BZOJ千题计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 刷题就图一乐 题目链接 https://hydro.ac/d/bzoj/p/2150 是 hydro ...

  4. BZOJ 2151 种树(可反悔贪心,链表)【BZOJ千题计划】就图一乐

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2151 是 hydro 的 BZOJ ...

  5. BZOJ 1799 [Ahoi2009] self 同类分布(数位DP)【BZOJ千题计划(quexin】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/1799(样例时限设置有问题,应该为 2 ...

  6. bzoj千题计划143:bzoj1935: [Shoi2007]Tree 园丁的烦恼

    http://www.lydsy.com/JudgeOnline/problem.php?id=1935 二维偏序问题 排序x,离散化树状数组维护y #include<cstdio> #i ...

  7. bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战

    http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...

  8. bzoj千题计划127:bzoj1041: [HAOI2008]圆上的整点

    http://www.lydsy.com/JudgeOnline/problem.php?id=1041 设 X>0 ,Y>0 X^2 + Y^2 = R^2 X^2 = R^2-Y^2 ...

  9. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

最新文章

  1. Go 代码中如何绑定 Host
  2. debian 下配置common lisp环境
  3. 邮件服务器“单点登录”功能
  4. thinkpad卡在logo界面_四大系列 一个品牌,超好用的商务伴侣Thinkpad
  5. Linux学习 命令部分
  6. 基于Servlet的MVC模式用户登录实例
  7. Python风格总结:翻转列表、数组
  8. Axure高保真家政服务用户端app全局说明+家政服务员工移动端app+家政服务web端管理信息系统(订单管理+服务管理+报表统计+财务管理+营销管理+人员管理)
  9. python读音翻译-Python翻译器
  10. 使用异步存储提升 Web 应用程序的离线体验
  11. MVC模式中编写一个登录的Servlet
  12. OBS-Linux直播神器(录屏神器)
  13. 电脑加域、exchange邮箱设置、绑定打印机
  14. C语言洛谷P1957口算练习题
  15. 没有一个绝对安全的系统 (二) 破解路由器后台密码
  16. mysql中str_to_date函数和date_format函数和now函数
  17. My Neighbor Alice新一轮土地销售分析
  18. UTC和东八区时间转换(python)
  19. 华硕 PRIME Z490-PLUS+i7-10700K黑苹果EFI引导文件
  20. android源码编译并刷入nexus 6p手机

热门文章

  1. php rpoplpush,Redis Rpoplpush 命令
  2. Boosting Xgboost
  3. docker 获取镜像
  4. javacript 多文件程序
  5. MySQl Window Function Concepts
  6. go语言实现zip压缩与解压
  7. 软考中级信息安全工程师开编
  8. vSphere 高级特性FT配置与管理
  9. puppet 学习总结(1)——puppet 入门详解
  10. 两个月新增 80万行代码,Linux 内核维护为什么不会崩?