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 50001 typedef long long LL; int prime[N];
bool vis[N];
int miu[N],sum[N]; LL f[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void premiu()
{
int cnt=;
miu[]=;
for(int i=;i<N;++i)
{
if(!vis[i])
{
prime[++cnt]=i;
miu[i]=-;
}
for(int j=;j<=cnt;++j)
{
if(prime[j]*i>=N) break;
vis[i*prime[j]]=true;
if(i%prime[j]==) break;
miu[i*prime[j]]=-miu[i];
}
}
for(int i=;i<N;++i) sum[i]+=sum[i-]+miu[i];
} LL pref(int x)
{
LL tot=;
int j;
for(int i=;i<=x;i=j+)
{
j=x/(x/i);
tot+=(LL)(j-i+)*(x/i);
}
return tot;
} int main()
{
premiu();
for(int i=;i<N;++i) f[i]=pref(i);
int T,n,m,j;
LL ans;
read(T);
while(T--)
{
ans=;
read(n); read(m);
if(n>m) swap(n,m);
for(int i=;i<=n;i=j+)
{
j=min(n/(n/i),m/(m/i));
ans+=f[n/i]*f[m/i]*(sum[j]-sum[i-]);
}
cout<<ans<<'\n';
}
}

bzoj千题计划203:bzoj3994: [SDOI2015]约数个数和的更多相关文章

  1. P3327/bzoj3994 [SDOI2015]约数个数和(莫比乌斯反演)

    P3327 [SDOI2015]约数个数和 神犇题解(转) 无话可补 #include<iostream> #include<cstdio> #include<cstri ...

  2. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  3. bzoj千题计划296:bzoj1053: [HAOI2007]反素数ant

    http://www.lydsy.com/JudgeOnline/problem.php?id=1053 求n以内约数个数最多的数 #include<cstdio> using names ...

  4. bzoj千题计划204:bzoj2813: 奇妙的Fibonacci

    http://www.lydsy.com/JudgeOnline/problem.php?id=2813 若j能整除i,则f[j]能整除f[i] 题目就变成了求约数个数和.约数的平方和 http:// ...

  5. BZOJ3994: [SDOI2015]约数个数和

    Description  设d(x)为x的约数个数,给定N.M,求     Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M.   O ...

  6. BZOJ3994: [SDOI2015]约数个数和(莫比乌斯反演)

    Description  设d(x)为x的约数个数,给定N.M,求     Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Out ...

  7. bzoj千题计划170:bzoj1968: [Ahoi2005]COMMON 约数研究

    http://www.lydsy.com/JudgeOnline/problem.php?id=1968 换个角度 一个数可以成为几个数的约数 #include<cstdio> #incl ...

  8. bzoj千题计划131:bzoj3993: [SDOI2015]星际战争

    http://www.lydsy.com/JudgeOnline/problem.php?id=3993 二分答案 源点向武器连 mid*攻击力的边 机器人向汇点连 防御力 的边 武器i能攻击机器人j ...

  9. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

随机推荐

  1. effective c++ 笔记 (1-3)

    // //  effective c++.cpp //  笔记 // //  Created by fam on 15/3/23. // // //-------------------------- ...

  2. stl源码剖析 详细学习笔记priority_queue slist

    // //  priority_queue.cpp //  笔记 // //  Created by fam on 15/3/16. // // //------------------------- ...

  3. Asp.Net_Session跟Cookie的记住登陆名

    最近在做ASP.NET的项目时,接触到了登陆权限模块,所有总结了一下登陆时用到的知识和方法技巧. 如图说明:实现的效果如图,由于验证码验证比较简单这里就不介绍了 首先用代码生成器生成项目,以三层为例进 ...

  4. Js_图片轮换

    本文介绍用javascript制作图片轮换效果,原理很简单,就是设置延时执行一个切换函数,函数里面是先设置下面的缩略图列表的白框样式,再设置上面大图的src属性,在IE中显示很正常,可是在FF中会有变 ...

  5. Final阶段基于NABCD评论作品

    组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶  刘佳瑞  公冶令鑫  杨磊  刘欣  张宇  卢帝同 一.拉格朗日2018--<飞词> 1.1  NABCD分析 N(Need,需求):该 ...

  6. [Week2 作业] 代码规范之争

    这四个问题均是出自 http://goodmath.scientopia.org/2011/07/14/stuff-everyone-should-do-part-2-coding-standards ...

  7. 这个C#程序真了不起

    (1)在2~31中,这个数不能且仅不能被两个相邻数整除 (2)2 123 581 660 200 (2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,2 ...

  8. Vue实现对数组、对象的深拷贝、复制

    当组件间传递对象时,由于此对象的引用类型指向的都是一个地址(除了基本类型跟null,对象之间的赋值,只是将地址指向同一个,而不是真正意义上的拷贝),如下 数组: ,,]; var b = a; b.p ...

  9. quartz.net 3.x版本如何通过xml文件进行Job配置

    在2.x版本中,我们可以简单的在quartz.config文件中通过以下Xml配置方式来注册相应的Job以及触发器 quartz.plugin.xml.type = Quartz.Plugin.Xml ...

  10. BZOJ2597 WC2007剪刀石头布(费用流)

    考虑使非剪刀石头布情况尽量少.设第i个人赢了xi场,那么以i作为赢家的非剪刀石头布情况就为xi(xi-1)/2种.那么使Σxi(xi-1)/2尽量小即可. 考虑网络流.将比赛建成一排点,人建成一排点, ...