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 + 5;
const int Maxn = 1.5e6;
const int M = 2e7 + 5;int pCnt = 0, pri[N], mu[N], tot = 0, 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[1] = 1;for (int i = 2; i <= Maxn; i++) {if (!np[i]) pri[++pCnt] = i, mu[i] = -1;for (int j = 1; j <= pCnt && i * pri[j] <= Maxn; j++) {np[i * pri[j]] = 1;if (i % pri[j] == 0) {mu[i * pri[j]] = 0;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 = 0;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 = 1; i <= lim; i++)if (mu[i])for (int j = 1; i * j <= lim; j++)add(i * j, i);ll ans = 0LL;for (int i = 1; i <= lim; i++) {ll mx = min(n / i, 1LL * i - 1), mn = max(1LL, 1LL * i - (n / i));ans += getSum(mx, i) - getSum(mn - 1, i);}printf("%lld\n", ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/CzxingcHen/p/10204182.html

Luogu 4844 LJJ爱数数相关推荐

  1. Luogu P4844 LJJ爱数数

    题目链接 https://www.luogu.org/problemnew/show/P4844 题解 1a+1b=1c \frac{1}{a}+\frac{1}{b}=\frac{1}{c} a1​ ...

  2. P4844 LJJ爱数数

    题目 P4844 LJJ爱数数 本想找到莫比乌斯反演水题练练,结果直接用了两个多小时才做完 做法 \(\sum\limits_{a=1}^n\sum\limits_{b=1}^n\sum\limits ...

  3. 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 ...

  4. 「LOJ6482」LJJ爱数数

    「LOJ6482」LJJ爱数数 解题思路 : 打表发现两个数 \(a, b\) 合法的充要条件是(我不管,我就是打表过的): \[ a + b = \text{gcd}(a, b)^2 \] 设 \( ...

  5. 中国石油大学(北京)第三届“骏码杯”程序设计竞赛(同步赛)——C 小菲爱数数

    题目链接:C-小菲爱数数_中国石油大学(北京)第三届"骏码杯"程序设计竞赛(同步赛) (nowcoder.com) 思路好像和题解不一样,但是a了. 主要思路:首先肯定是要先把素数 ...

  6. 华为手机8大超实用功能!省心省力省钱!数数你用过几个

    由于种种客观因素,今年好多小伙伴都换了华为手机, 可换了之后,却有好多功能不会用,或者说还从没发现, 那实在是太暴殄天物啦! 本文就用动图来直观演示--那些不为人知的8大超实用功能吧! 涵盖学习工作生 ...

  7. 数数题(计数类 DP)做题记录

    数数题(计数类 DP)做题记录 CF1657E Star MST 我们称张无向完全图是美丽的当且仅当:所有和 \(1\) 相连的边的边权之和等于这张完全图的最小生成树的边权之和. 完全图点数为 \(n ...

  8. NOIP模拟测试29「爬山·学数数·七十和十七」

    爬山题解不想写了 学数数 离散化然后找到以每一个值为最大值的连续子段有多少个,然后开个桶维护 那么怎么找以每一个值为最大值的连续子段个数 方法1(我的极笨的方法) 考试时我的丑陋思路, 定义极左值为左 ...

  9. 「SDOI2014」数数 解题报告

    「SDOI2014」数数 题目描述 我们称一个正整数 \(N\) 是幸运数,当且仅当它的十进制表示中不包含数字串集合 \(S\) 中任意一个元素作为其子串. 例如当 \(S=(\)22, 333, 0 ...

最新文章

  1. C语言再学习 -- 详解C++/C 面试题 2
  2. mysql show timestamp_mysql中 datatime与timestamp的区别说明
  3. Oracle INTERVAL
  4. Spring Cloud面试题(2020最新版)
  5. 89. Gray Code - LeetCode
  6. python 颜色_如何使用python中matplotlib库分析图像颜色
  7. 从入门到入土:Python爬虫学习|实例练手|爬取百度产品列表|Xpath定位标签爬取|代码注释详解
  8. 主板9针DB9串口插针、主板串口挡板延长线针脚定义
  9. 分布式通用爬虫管理平台Crawlab
  10. 三菱凌云3故障代码_三菱故障代码一览表
  11. 修改华为 Echolife HG8010h 的超级用户密码
  12. 计算机基本办公软件应用技能有哪些,办公人员应掌握哪些办公软件技能
  13. 路由器回执路由配置_如何用console线连接路由器进行初始配置-----无私奉献版(转载请注明出处)...
  14. 【工具】kindle 怎么用微信读书
  15. 技嘉显卡性能测试软件,性能测试成绩总结_技嘉 GA-G1.Sniper B5_主板评测-中关村在线...
  16. 两个月,看完这套资料他终于如愿拿到阿里 Offer 了!
  17. java 2 实用教程(第五版)第六章课后编程题:设计一个动物声音模拟器,希望模拟器可以模拟许多的动物的叫声。
  18. 手机pptv如何切换视频和音频
  19. 基于微信小程序的二手汽车拍卖系统
  20. mv强制覆盖 shell_shell mv命令

热门文章

  1. B. Vanya and Lanterns
  2. 抖音html数字9,抖音687是什么意思
  3. matlab 画阻尼振荡信号及其包络线
  4. 商用在线客服软件测试报告
  5. Centos 6安装Maven
  6. 已解决-‘cv2’ has no attribute ‘gapi_wip_gst_GStreamerPipeline’
  7. 二见钟情之个人重构的心路历程
  8. 冯唐:成大事者,必经的3个阶段
  9. .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named
  10. 同时查询中通快运多个单号物流,并分析派件时效