Luogu 4844 LJJ爱数数
LOJ 6482
设$d = gcd(a, b)$,$xd = a$,$yd = b$,因为$\frac{1}{a} + \frac{1}{b} = \frac{a + b}{ab} = \frac{1}{c}$,所以$c(x + y)= xyd$。
因为$d$不整除于$c$,那么$d | (x + y)$,把$d$除过去,
$$\frac{x + y}{d} = \frac{xy}{c}$$
设这个式子等于$p$,如果$p$不为$1$,那么$p | x$或者$p | y$,$p$不可能同时整除$x, y$($x, y$互质),但是$p | (x + y)$,所以不成立,得到$p = 1$。
原来的条件就变成了$a + b = d^2$,$c = \frac{ab}{d^2}$,$1 \leq a,b,c \leq n$。
我们可以枚举这个$d$,然后枚举$x$,这样子只要算出和$d$互质的数的数量就可以了。
考虑一下$x$的范围,$x$满足
$$1 \leq dx \leq n$$
$$1 \leq d^2 - dx \leq n$$
那么$max(1, d - \left \lfloor \frac{n}{d} \right \rfloor)\leq x \leq min(d - 1, \left \lfloor \frac{n}{d} \right \rfloor)$。
即为求
$$\sum_{d = 1}^{\sqrt{2n}}\sum_{x = max(1, d - \left \lfloor \frac{n}{d} \right \rfloor)}^{min(d - 1, \left \lfloor \frac{n}{d} \right \rfloor)}[gcd(x, d - x) == 1]$$
有辗转相减法$gcd(x, d - x) = gcd(x, d)$。
求一定范围内的$x$,把它拆成前缀和相减的形式,现在就是要做:
$$\sum_{i = 1}^{k}[gcd(i, d) == 1]$$
$$ = \sum_{i = 1}^{k}\sum_{j | gcd(i, d)}\mu (j)$$
$$ = \sum_{i = 1}^{k}\sum_{j = 1}^{d}\mu (j)[j | d][j | i]$$
$$ = \sum_{j | d}\mu (j)\left \lfloor \frac{k}{j} \right \rfloor$$
枚举$d$的约数即可。
时间复杂度$O(\sqrt{n}log(\sqrt{n}))$。
Code:
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll; const int N = 2e6 + ;
const int Maxn = 1.5e6;
const int M = 2e7 + ; int pCnt = , pri[N], mu[N], tot = , head[N];
ll n;
bool np[N]; struct Node {
int to, nxt;
} e[M]; inline void add(int from, int to) {
e[++tot].to = to;
e[tot].nxt = head[from];
head[from] = tot;
} inline void sieve() {
mu[] = ;
for (int i = ; i <= Maxn; i++) {
if (!np[i]) pri[++pCnt] = i, mu[i] = -;
for (int j = ; j <= pCnt && i * pri[j] <= Maxn; j++) {
np[i * pri[j]] = ;
if (i % pri[j] == ) {
mu[i * pri[j]] = ;
break;
}
mu[i * pri[j]] = -mu[i];
}
}
} inline ll max(ll x, ll y) {
return x > y ? x : y;
} inline ll min(ll x, ll y) {
return x > y ? y : x;
} inline ll getSum(ll k, int g) {
ll res = ;
for (int i = head[g]; i; i = e[i].nxt)
res += mu[e[i].to] * (k / e[i].to);
return res;
} int main() {
sieve();
scanf("%lld", &n); int lim = sqrt(2LL * n);
for (int i = ; i <= lim; i++)
if (mu[i])
for (int j = ; i * j <= lim; j++)
add(i * j, i); ll ans = 0LL;
for (int i = ; i <= lim; i++) {
ll mx = min(n / i, 1LL * i - ), mn = max(1LL, 1LL * i - (n / i));
ans += getSum(mx, i) - getSum(mn - , i);
} printf("%lld\n", ans);
return ;
}
Luogu 4844 LJJ爱数数的更多相关文章
- luogu 4844 LJJ爱数数 (莫比乌斯反演+数学推导)
题目大意:求满足gcd(a,b,c)==1,1/a+1/b=1/c,a,b,c<=n的{a,b,c}有序三元组个数 因为题目里有LJJ我才做的这道题 出题人官方题解https://www.cnb ...
- 「LOJ6482」LJJ爱数数
「LOJ6482」LJJ爱数数 解题思路 : 打表发现两个数 \(a, b\) 合法的充要条件是(我不管,我就是打表过的): \[ a + b = \text{gcd}(a, b)^2 \] 设 \( ...
- P4844 LJJ爱数数
题目 P4844 LJJ爱数数 本想找到莫比乌斯反演水题练练,结果直接用了两个多小时才做完 做法 \(\sum\limits_{a=1}^n\sum\limits_{b=1}^n\sum\limits ...
- P4844 LJJ爱数数 数论
思路: 化简后得到(a+b)c=ab,设g=(a,b),A=a/g,B=b/g,则g(A+B)c=ABg^2,即(A+B)c=ABg 由题目已知条件:(a,b,c)=1,即(g,c)=1,g|(A+B ...
- LJJ爱数数
LJJ爱数数 求\(\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\epsilon(gcd(i,j,k))(\frac{1}{i}+\frac{1}{j}==\frac{1} ...
- [HZOI 2016]我们爱数数
[HZOI 2016]我们爱数数 题目大意: 一张圆桌,每个位置按顺时针从\(1\)到\(n\)编号.有\(n\)个人,编号从\(1\)到\(n\).如果编号为\(i\)的人坐到了编号为\(i\)的位 ...
- COJ 0036 数数happy有多少个?
数数happy有多少个? 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 图图是个爱动脑子.观察能力很强的好学生.近期他正学英语 ...
- 【BZOJ】【3530】【SDOI2014】数数
AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...
- BZOJ3530: [Sdoi2014]数数
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 322 Solved: 188[Submit][Status] ...
随机推荐
- Windows下运行Hadoop
Windows下运行Hadoop,通常有两种方式:一种是用VM方式安装一个Linux操作系统,这样基本可以实现全Linux环境的Hadoop运行:另一种是通过Cygwin模拟Linux环境.后者的好处 ...
- 十九、python沉淀之路--装饰器
一.实现装饰器的预备知识 装饰器 = 高阶函数 + 函数嵌套 + 闭包 1.高价函数定义: 1.函数接收的参数是一个函数名 2.函数的返回值是一个函数名 3.满足上述条件任意一个,都可称之 ...
- Tornado服务端基本的配置文件(Python)
web_set = { # -------一般设置-------- 'debug': True, 'port': 8836, 'autoreload': True, 'ui_modules': {}, ...
- JAVA 工厂模式:简单工厂
简单工厂模式(SimpleFactory Pattern): 又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,可以根据参数的不同返回不同类的 ...
- numpy之初探排序和集合运算
排序 排序 numpy与python列表内置的方法类似,也可通过sort方法进行排序. 用法如下: In [1]: import numpy as np In [2]: x = np.random.r ...
- CF 504E Misha and LCP on Tree——后缀数组+树链剖分
题目:http://codeforces.com/contest/504/problem/E 树链剖分,把重链都接起来,且把每条重链的另一种方向的也都接上,在这个 2*n 的序列上跑后缀数组. 对于询 ...
- 【Machine Learning 学习笔记】OSX Octave 输出图像问题
Uninstall any existing gnuplot on your OSX brew uninstall gnuplot Install gnuplot with either X or X ...
- 解决Maven提示:Could not read settings.xml, assuming default values
本文转载自:http://blog.csdn.net/hqocshheqing/article/details/47702049 最近在学习Maven 时总是出现 Could not read se ...
- Java-Maven-Runoob:Maven 仓库
ylbtech-Java-Maven-Runoob:Maven 仓库 1.返回顶部 1. Maven 仓库 在 Maven 的术语中,仓库是一个位置(place). Maven 仓库是项目中依赖的第三 ...
- StringBuilder与StringBuffer的区别
相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...