题目链接

BZOJ2671

题解

令\(d = (a,b)\),\(a = dx,b = dy\)

那么有

\[\begin{aligned}
d(x + y) | d^2xy \\
(x + y) | dxy
\end{aligned}
\]

由于\(x \perp y\),所以

\[(x + y) | d
\]

令\(d = k(x + y)\),那么较大的\(b = yk(x + 1)\)要满足\(b <= n\)

那么对于一组互质的\((x,y)\),合法的\(d\)的个数有

\[\lfloor \frac{n}{y(x + y)} \rfloor
\]

那么就有式子

\[\begin{aligned}
ans &= \sum\limits_{x = 1}^{\sqrt{n}} \sum\limits_{y = x + 1}^{\sqrt{n}}[(x,y) = 1] \lfloor \frac{n}{y(x + y)} \rfloor \\
&= \sum\limits_{x = 1}^{\sqrt{n}} \sum\limits_{y = x + 1}^{\sqrt{n}}\lfloor \frac{n}{y(x + y)} \rfloor \sum\limits_{d | (x,y)} \mu(d) \\
&= \sum\limits_{d = 1}^{\sqrt{n}} \mu(d) \sum\limits_{x = 1}^{\lfloor \frac{n}{d} \rfloor} \sum\limits_{y = x + 1}^{\lfloor \frac{n}{d} \rfloor} \lfloor \frac{n}{y(x + y)} \rfloor\\
&= \sum\limits_{d = 1}^{\sqrt{n}} \mu(d) \sum\limits_{y = 1}^{\lfloor \frac{n}{d} \rfloor}\sum\limits_{x = 1}^{y - 1} \lfloor \frac{n}{y(x + y)} \rfloor\\
&= \sum\limits_{d = 1}^{\sqrt{n}} \mu(d) \sum\limits_{y = 1}^{\lfloor \frac{n}{d} \rfloor}\sum\limits_{x = y + 1}^{min(2y - 1,\lfloor \frac{n}{d} \rfloor)} \lfloor \frac{n}{d^2 yx} \rfloor
\end{aligned}
\]

里边可以整除分块,复杂度\(O(?n^{\frac{3}{4}})\)

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
#include<map>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define cls(s,v) memset(s,v,sizeof(s))
#define mp(a,b) make_pair<int,int>(a,b)
#define cp pair<int,int>
using namespace std;
const int maxn = 100005,maxm = 100005,INF = 0x3f3f3f3f;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57){if (c == '-') flag = 0; c = getchar();}
while (c >= 48 && c <= 57){out = (out << 1) + (out << 3) + c - 48; c = getchar();}
return flag ? out : -out;
}
LL ans;
int n,m;
int p[maxn],isn[maxn],mu[maxn],pi,N = 100000;
void init(){
mu[1] = 1;
for (int i = 2; i <= N; i++){
if (!isn[i]) p[++pi] = i,mu[i] = -1;
for (int j = 1; j <= pi && i * p[j] <= N; j++){
isn[i * p[j]] = true;
if (i % p[j] == 0) break;
mu[i * p[j]] = -mu[i];
}
}
}
LL cal(int n,int m){
LL re = 0;
for (int y = 1; y <= m; y++){
int t = n / y;
for (int x = y + 1,nxt; x < (y << 1) && x <= t; x = nxt + 1){
nxt = min(t / (t / x),(y << 1) - 1);
re += 1ll * (nxt - x + 1) * (t / x);
}
}
return re;
}
int main(){
n = read(); m = (int)sqrt(n);
init();
for (int d = 1; d <= m; d++) if (mu[d]) ans += mu[d] * cal(n / d / d,m / d);
printf("%lld\n",ans);
return 0;
}

BZOJ2671 Calc 【莫比乌斯反演】的更多相关文章

  1. 【BZOJ2671】Calc(莫比乌斯反演)

    [BZOJ2671]Calc 题面 BZOJ 给出N,统计满足下面条件的数对(a,b)的个数: 1.\(1\le a\lt b\le N\) 2.\(a+b\)整除\(a*b\) 我竟然粘了题面!!! ...

  2. BZOJ2671 Calc(莫比乌斯反演)

    两个多月之前写的题,今天因为看到一道非常相似的题就翻出来了,发现完全不会,没救. 感觉这个题其实第一步是最难想到的,也是最重要的. 设d=gcd(a,b).那么a=yd,b=xd,且gcd(x,y)= ...

  3. hdu.5212.Code(莫比乌斯反演 && 埃氏筛)

    Code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  4. bzoj 2818 Gcd(欧拉函数 | 莫比乌斯反演)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2818 [题意] 问(x,y)为质数的有序点对的数目. [思路一] 定义f[i]表示i之 ...

  5. 【BZOJ2301】【HAOI2011】Problem B(莫比乌斯反演)

    [BZOJ2301][HAOI2011]Problem B(莫比乌斯反演) 题面 Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y ...

  6. 【Luogu3455】【POI2007】ZAP-Queries(莫比乌斯反演)

    [Luogu3455][POI2007]ZAP-Queries(莫比乌斯反演) 题面 题目描述 FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x ...

  7. BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演

    BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演 Description  设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表 ...

  8. Luogu4916 魔力环 莫比乌斯反演、组合、生成函数

    传送门 先不考虑循环同构的限制,那么对于一个满足条件的序列,如果它的循环节长度为\(d\),那么与它同构的环在答案中就会贡献\(d\)次. 所以如果设\(f_i\)表示循环节长度恰好为\(i\)的满足 ...

  9. LOJ# 572. 「LibreOJ Round #11」Misaka Network 与求和(min25筛,杜教筛,莫比乌斯反演)

    题意 求 \[ \sum_{i = 1}^{n} \sum_{i = 1}^{n} f(\gcd(i, j))^k \pmod {2^{32}} \] 其中 \(f(x)\) 为 \(x\) 的次大质 ...

  10. 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)

    [LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...

随机推荐

  1. docker usage

    docker ps -a 查看物理机上面所有容器信息列表 docker exec -it $docker_id /bin/bash 进入容器以默认帐号 docker exec -it -u root ...

  2. 打包一个传统的ASP.NET web app作为Docker镜像

    (1)针对NerdDinner应用的Dockerfile内容如下 PS E:\DockeronWindows\Chapter02\ch02-nerd-dinner> cat .\Dockerfi ...

  3. Bootstrap学习--栅格系统

    响应式布局页面:即同一套页面可以兼容不同分辨率的设备. Bootstrap依赖于栅格系统实现响应式布局,将一行均分为12个格子,可以指定元素占几个格子. 实现过程 1.定义容器,相当于之前的table ...

  4. time命令详情

    基础命令学习目录首页 原文链接:https://blog.csdn.net/adaptiver/article/details/6596143?utm_source=blogxgwz3 linux下t ...

  5. C++ Style Languages: C++, Objective-C, Java, C#

    Hyperpolyglot.org From Hyperpolyglot.org C++ Style Languages: C++, Objective-C, Java, C# a side-by-s ...

  6. [C#] 取得每月第一天和最後一天、某月总天数

    思路: 1. DateTime dt= DateTime.Now;  //获取当前时间 eg:2013-09-08 09:25:0 0 2. DateTime dt1 = new DateTime(d ...

  7. sprint2(第六天)

    昨天休息一天,今天继续做任务. 燃尽图:

  8. 在虚拟机下安装Ubuntu

    目录: 1.安装虚拟机 2.在虚拟下安装Ubuntu 本文将按照目录分两步来讲一下在虚拟机下安装Ubuntu.第一步是安装虚拟机,第二步是在虚拟机下安装Ubuntu. 安装虚拟机 下载虚拟机链接以及激 ...

  9. 【欢迎来怼】 Beta发布事后诸葛亮会议

    队名:欢迎来怼 项目名称:博客园Android端APP 小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 ————————————————————————————————————— ...

  10. teamwork 2

    1.访问上学期项目团队,学习他们的得失. 上学期学长们有一个项目是学霸系统,在看过了学长们的相关博客后,我们可以感受到学长们确实花费了不少心思,也看到了许多值得我们学习的地方. 首先,学长们在项目开始 ...