Gcd

\[Time Limit: 10000 ms\quad Memory Limit: 262144 kB
\]

题意

求 \(gcd\left(x,y\right) = p\) 的对数,其中\(1 \leq x,y \leq n\)且 \(p\)是质数

思路

\(g\left(x\right)\) 表示 \(gcd\left(a, b\right) | x\) 的对数

\(f\left(x\right)\) 表示 \(gcd\left(a, b\right) = x\) 的对数

根据莫比乌斯反演有

\[ f\left(n\right) = \sum_{n|d} g\left(d\right)\\
g\left(n\right) = \sum_{n|d} \mu\left(\frac{d}{n}\right) f\left(d\right) \\
\]

根据题意

\[ f\left(x\right) = \lfloor\frac{n}{x}\rfloor \lfloor\frac{n}{x}\rfloor \\
\]

那么就可以得到

\[\begin{aligned}
ans &= \sum_{prime(p)} g\left(p\right) \\
&= \sum_{prime(p)} \sum_{p|d} \mu\left(\frac{d}{p}\right) \lfloor\frac{n}{d}\rfloor \lfloor\frac{n}{d}\rfloor \\
\end{aligned}
\]

对于每个 \(d\),找到所有满足 \(p|d\) 的 \(prime(p)\),预处理出 \(\sum_{p|d}\mu\left(\frac{d}{p}\right)\)。

  • 如果 \(d\) 是质数,容易得到 \(sum[d] = 1\)。
  • 如果 \(d\) 不是质数,那么可以把 \(d\) 看成 \(p_{1}^{a1}p_{2}^{a2}...p_{k}^{ak}\),设 \(d = p_{1}x\)

\[\begin{aligned}
\sum_{p|d} \mu\left(\frac{d}{p}\right) &= \mu\left(\frac{d}{p_{1}}\right)+\mu\left(\frac{d}{p_{2}}\right)+...+\mu\left(\frac{d}{p_{k}}\right)\\
&= \mu\left(x\right) + \mu\left(\frac{p_{1}x}{p_{2}}\right)+...+\mu\left(\frac{p_{1}x}{p_{k}}\right) \\
\sum_{p|x}\mu\left(\frac{x}{p}\right) &= \mu\left(\frac{x}{p_{2}}\right)+...+\mu\left(\frac{x}{p_{k}}\right)
\end{aligned}
\]

因为\(p_{k}|d,d=p_{1}x\),则 \(p_{k}|x\)。那么现在的问题就在于 \(p_{1}|x\)。

\(\quad\) 1. 若 \(p1|x\),则对于 \(\left(\frac{p_{1}x}{p_{k}}\right)\),可以发现除完以后,仍然会包括两个及以上 \(p_{1}\) 因子,所以其 \(\mu\) 值为\(0\)。

\(\quad\) 2. 反之,\(\left(\frac{p_{1}x}{p_{k}}\right)\) 在 \(\left(\frac{x}{p_{k}}\right)\)的基础上多了一个 \(p_{1}\) 因子且指数为 \(1\),根据 \(\mu\) 的公式,\(\mu\left(\frac{p_{1}x}{p_{k}}\right) =- \mu\left(\frac{x}{p_{k}}\right)\)。

综合上述

\[\sum_{p|d} \mu\left(\frac{d}{p}\right) =
\begin{cases}
\mu\left(x\right) & p_{1}|x\\
\mu\left(x\right) - \sum_{x|d} \mu\left(\frac{x}{p}\right) &otherwise\\
\end{cases}
\]

/***************************************************************
> File Name : a.cpp
> Author : Jiaaaaaaaqi
> Created Time : 2019年07月17日 星期三 10时20分16秒
***************************************************************/ #include <map>
#include <set>
#include <list>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <cfloat>
#include <string>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define lowbit(x) x & (-x)
#define mes(a, b) memset(a, b, sizeof a)
#define fi first
#define se second
#define pii pair<int, int> typedef unsigned long long int ull;
typedef long long int ll;
const int maxn = 1e7 + 10;
const int maxm = 1e5 + 10;
const ll mod = 1e9 + 7;
const ll INF = 1e18 + 100;
const int inf = 0x3f3f3f3f;
const double pi = acos(-1.0);
const double eps = 1e-8;
using namespace std; ll n, m;
int cas, tol, T; int pri[maxn], mob[maxn];
bool ispri[maxn];
ll sum[maxn]; void handle() {
mes(sum, 0), mes(pri, 0), mes(ispri, 1);
tol = 0;
mob[1] = 1;
int mx = 1e7;
for(int i=2; i<=mx; i++) {
if(ispri[i]) {
pri[++tol] = i;
mob[i] = -1;
sum[i] = 1;
}
for(int j=1; j<=tol && i*pri[j]<=mx; j++) {
ispri[i*pri[j]] = false;
if(i%pri[j] == 0) {
mob[i*pri[j]] = 0;
sum[i*pri[j]] = mob[i];
break;
} else {
mob[i*pri[j]] = -mob[i];
sum[i*pri[j]] = mob[i] - sum[i];
}
}
}
} int main() {
handle();
printf("%lld %lld %lld\n", sum[12], sum[6], mob[6]);
scanf("%lld", &n);
ll ans = 0;
for(ll d=2; d<=n; d++) {
ans += 1ll*sum[d]*(n/d)*(n/d);
}
printf("%lld\n", ans);
return 0;
}

Gcd HYSBZ - 2818 (莫比乌斯反演)的更多相关文章

  1. HYSBZ - 2818莫比乌斯反演

    链接 题意很简洁不说了 题解:一开始我想直接暴力,复杂度是O(log(1e7)*sqrt(1e7))算出来是2e9,可能会复杂度爆炸,但是我看时限是10s,直接大力莽了一发暴力,没想到就过了= = 就 ...

  2. 【CJOJ2512】gcd之和(莫比乌斯反演)

    [CJOJ2512]gcd之和(莫比乌斯反演) 题面 给定\(n,m(n,m<=10^7)\) 求 \[\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)\] 题解 首先把公因数直 ...

  3. bnu——GCD SUM (莫比乌斯反演)

    题目:GCD SUM 题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=39872 算法:莫比乌斯反演.优化 #include<stdio.h& ...

  4. 【Project Euler】530 GCD of Divisors 莫比乌斯反演

    [题目]GCD of Divisors [题意]给定f(n)=Σd|n gcd(d,n/d)的前缀和F(n),n=10^15. [算法]莫比乌斯反演 [题解]参考:任之洲数论函数.pdf 这个范围显然 ...

  5. GCD HDU - 1695 莫比乌斯反演入门

    题目链接:https://cn.vjudge.net/problem/HDU-1695#author=541607120101 感觉讲的很好的一个博客:https://www.cnblogs.com/ ...

  6. HDU - 4675 GCD of Sequence (莫比乌斯反演+组合数学)

    题意:给出序列[a1..aN],整数M和k,求对1-M中的每个整数d,构建新的序列[b1...bN],使其满足: 1. \(1 \le bi \le M\) 2. \(gcd(b 1, b 2, -, ...

  7. HYSBZ - 2005 莫比乌斯反演

    链接 对于gcd(i,j)的位置来说,对答案的贡献是2*(gcd(i,j)-1)+1,所以答案ans ans=Σ(1<=i<=n)(1<=j<=m)2*(gcd(i,j)-1) ...

  8. [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)

    题目链接:https://www.luogu.org/problemnew/show/P2568#sub 题目大意: 计算​$\sum_{x=1}^n\sum_{y=1}^n [gcd(x,y)==p ...

  9. 【HDU4947】GCD Array(莫比乌斯反演+树状数组)

    点此看题面 大致题意: 一个长度为\(n\)的数组,实现两种操作:将满足\(gcd(i,k)=d\)的\(a_i\)加上\(v\),询问\(\sum_{i=1}^xa_i\). 对于修改操作的推式子 ...

随机推荐

  1. Docker在Windows上的初体验

    作为Docker的初学者,我有几个疑问,找到了答案,并实践了一下,希望对和我一样的初学者有帮助: 1.Docker是什么? 大家对虚拟机应该比较熟悉,虚拟机和docker都是为了实现隔离. 虚拟机隔离 ...

  2. GIT 安装和使用

    目录 GIT 安装和使用 一.GIT 介绍 二.GIT 安装 三.GIT 使用 1. 配置 2. 创建版本库 3. 远程仓库 4. 分支管理 5.标签管理 6. 自定义 GIT 安装和使用 一.GIT ...

  3. Java学习:线程实现方式

    线程实现方式 并发与并行 并发:指两或多个事件在同一个时间段内发生 并行:指两或多个事件在同一个时刻发生(同时发生) 进程的概念 内存:所有的应用程序都需要进入到内存中执行 临时存储RAM 硬盘:永久 ...

  4. Mysql系列(四) —— MySQL的Charset和Collation

    本文转载自:再见乱码:5分钟读懂MySQL字符集设置 一.内容概述 在MySQL的使用过程中,了解字符集.字符序的概念,以及不同设置对数据存储.比较的影响非常重要.不少同学在日常工作中遇到的" ...

  5. centos6 配置静态IP地址

    CentOS网卡配置源文件如下:DEVICE=eth0HWADDR=00:0C:29:A8:67:46TYPE=EthernetUUID=4103d7a8-d073-4e93-ac68-e6f8496 ...

  6. CXF 教程 (二)

    将 Service 布署在远端 1 Overview 2 Server 3 Client 1 Overview 上例中我们的 Server 和 Client 都是在本地.下面演示如果布署在远端需如何修 ...

  7. Mysql之索引(六)

    1.思考 在图书馆是怎么找到一本书的? 一般的应用系统对比数据库的读写比例在10:1左右(即有10次查询有1次写操作),而且插入操作和更新操作很少出现性能问题. 遇到最多,最复杂的还是一些复杂的查询操 ...

  8. 【转载】如何查看本机电脑的公网IP

    在实际使用电脑的过程中,很多时候我们需要知道本地电脑的当前公网IP地址,我们都知道个人电脑的公网IP是不固定的,可能每天的对外公网IP都不一样,如果要查看当前本机电脑的对外公网IP,方法也很简单,直接 ...

  9. Vue – 基础学习(3):$forceUpdate()和$nextTick()的区别

    Vue – 基础学习(3):$forceUpdate()和$nextTick()的区别

  10. FastJson实现复杂对象序列化与反序列化

    原文:http://blog.csdn.net/xqhadoop/article/details/62217954 一.认识FastJson 1.优势 fastjson是目前java语言中最快的jso ...