模板题-- \[\sum\limits_{i=1}^a\sum\limits_{j=1}^b[(i,j)=k] = \sum\limits_{i=1}^a\sum\limits_{j=1}^b[k|i][k|j][({i\over k},{j\over k})=1]=\sum\limits_{i=1}^{a\over k}\sum\limits_{j=1}^{b\over k}[(i,j)=1]\] 继续化简 \[\sum\limits_{i=1}^{b\over k}\sum\limits_{…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 莫比乌斯反演 1101: [POI2007]Zap 设 \(f(i)\) 表示 \((x,y)\) \(x\in [1,a],y\in [1,b]\) 满足 \(gcd(x,y)=i\) 的对数 那么答案就是 \(f(d)\) 构造一个函数 \(g(i)\) 表示 \((x,y)\) \(x\in [1,a],y\in [1,b]\) 满足 \(gcd(x,y)|i\) 的对数 于是…
整除分块 用于计算$\sum_{i=1}^n f(\lfloor{n/i} \rfloor)*i$之类的函数 整除的话其实很多函数值是一样的,对于每一块一样的商集中处理即可 若一个商的左边界为l,则右边界为$\lfloor{\frac{n}{\lfloor\frac{n}{l}\rfloor}}\rfloor$ 这样时间复杂度就是$O(\sqrt{n})$ 如果是类似$\sum_{i=1}^n f(\lfloor{n/i} \rfloor)*i \ opt \ f(\lfloor{m/i} \r…
题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. \(1 \leq T \leq 10^4\),\(1 \leq n,m \leq 10^7\). 今天终于学会了莫比乌斯反演反演~~,就写篇博客加深下印象吧. 要说这莫比乌斯反演有多么博大精深,就不得不从莫比乌斯函数 \(\mu(x)\) 说起. 我们定义 \(\mu(x)\) 为: \[\mu(…
[POI2007]ZAP-Queries \(solution:\) 唉,数论实在有点烂了,昨天还会的,今天就不会了,周末刚证明的,今天全忘了,还不如早点写好题解. 这题首先我们可以列出来答案就是: \(ans=\sum_{i=1}^{a}{\sum_{j=1}^{b}{[gcd(i,j)==d]}}\) 我们发现后面那个东西(只有\(gcd(i,j)==d\) 时才为一)跟莫比乌斯很像,莫比乌斯是(只有$n==$1 才为一),所以我们再尝试转化一下(把d转化成1): \(ans=\sum_{i…
https://www.luogu.org/problemnew/show/P2257 求 \(n,m\) 中 \(gcd(i,j)==p\) 的数对的个数 求 $\sum\limits_p \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[gcd(i,j)==p] $ 由套路: \(=\sum\limits_p \sum\limits_{k=1}^{N}\mu(k) \lfloor\frac{n}{kp}\rfloor \lfloor\frac{m}{kp}…
考虑到\(lcm(i,j)=\frac{ij}{gcd(i,j)}\) \(\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)}\) \(\sum_{d=1}^{n}\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]\frac{ij}{d}\) \(\sum_{d=1}^{n}\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]{ijd}\) \(=\sum_{d=1}^{n}d\sum_{i=1}^…
洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^C(\dfrac{ij}{\gcd(i,j)\gcd(i,j)})^{f(type)} \] 也就是说我们需要算出以下四项式子的值: \[\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^Ci^{f…
#include<bits/stdc++.h> #define LL long long using namespace std; ; bool vis[maxn]; int prime[maxn]; int mu[maxn]; int sum1[maxn]; int sum2[maxn]; ; void get_mu()// mo bi su si han shu { mu[]=; vis[]=; ;i<maxn;i++) // prime = 0; other = 1; { ;} ;…
https://www.luogu.org/problemnew/show/UVA11424 原本以为是一道四倍经验题来的. 因为输入的n很多导致像之前那样 \(O(n)\) 计算变得非常荒谬. 那么我们就需要引入一个整除分块! 首先预处理欧拉函数的前缀和,然后丢进分块里面搞一搞. 那么就是 \(O(n+t\sqrt{n})\) #include<bits/stdc++.h> using namespace std; #define ll long long #define N 4000005…