Gcd HYSBZ - 2818 (莫比乌斯反演)
Gcd
\]
题意
求 \(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\) 的对数
根据莫比乌斯反演有
g\left(n\right) = \sum_{n|d} \mu\left(\frac{d}{n}\right) f\left(d\right) \\
\]
根据题意
\]
那么就可以得到
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\)
\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)\)。
综合上述
\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 (莫比乌斯反演)的更多相关文章
- HYSBZ - 2818莫比乌斯反演
链接 题意很简洁不说了 题解:一开始我想直接暴力,复杂度是O(log(1e7)*sqrt(1e7))算出来是2e9,可能会复杂度爆炸,但是我看时限是10s,直接大力莽了一发暴力,没想到就过了= = 就 ...
- 【CJOJ2512】gcd之和(莫比乌斯反演)
[CJOJ2512]gcd之和(莫比乌斯反演) 题面 给定\(n,m(n,m<=10^7)\) 求 \[\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)\] 题解 首先把公因数直 ...
- bnu——GCD SUM (莫比乌斯反演)
题目:GCD SUM 题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=39872 算法:莫比乌斯反演.优化 #include<stdio.h& ...
- 【Project Euler】530 GCD of Divisors 莫比乌斯反演
[题目]GCD of Divisors [题意]给定f(n)=Σd|n gcd(d,n/d)的前缀和F(n),n=10^15. [算法]莫比乌斯反演 [题解]参考:任之洲数论函数.pdf 这个范围显然 ...
- GCD HDU - 1695 莫比乌斯反演入门
题目链接:https://cn.vjudge.net/problem/HDU-1695#author=541607120101 感觉讲的很好的一个博客:https://www.cnblogs.com/ ...
- 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, -, ...
- HYSBZ - 2005 莫比乌斯反演
链接 对于gcd(i,j)的位置来说,对答案的贡献是2*(gcd(i,j)-1)+1,所以答案ans ans=Σ(1<=i<=n)(1<=j<=m)2*(gcd(i,j)-1) ...
- [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)
题目链接:https://www.luogu.org/problemnew/show/P2568#sub 题目大意: 计算$\sum_{x=1}^n\sum_{y=1}^n [gcd(x,y)==p ...
- 【HDU4947】GCD Array(莫比乌斯反演+树状数组)
点此看题面 大致题意: 一个长度为\(n\)的数组,实现两种操作:将满足\(gcd(i,k)=d\)的\(a_i\)加上\(v\),询问\(\sum_{i=1}^xa_i\). 对于修改操作的推式子 ...
随机推荐
- 原始(Prototype)模式
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型对象创建新的对象. 原型模式其实就是从一个对象创建另外一个可复制的对象,而且不需要知道任何创建的细节.(最常用的就是基于流的深复制) 原始模 ...
- .net core使用ocelot---第二篇 身份验证
简介原文链接 .net core使用ocelot---第一篇 简单使用 接上文,我将继续介绍使用asp.net core 创建API网关,主要介绍身份验证(authentication )相 ...
- Git教程-安装与创建版本库
Git是一个分布式版本控制系统,他通过命令行使用的工具,Github是提供Git仓库托管服务的网站 安装参考: https://www.liaoxuefeng.com/wiki/89604348802 ...
- Geany——Python配置
Geany是一个很不错的编辑器,操作很简单,这里记录一下Geany的入手设置(在下是一个Python程序猿,就以Python为例): 1:新建:选择 下拉菜单中的 main.py ,然后就能生成P ...
- xcode模拟器使用常用的命令。
1.查看模拟器的udid用的 xcrun instruments -s xcrun simctl list 2.启动这个模拟器: xcrun instruments -w 'B39EC2FF-8A8B ...
- 去世父亲在儿子手机中复活,这可能是最温暖的一个AI
美国青年James Vlahos的父亲不幸因病去世,但聊以慰藉的是,现在他每天还能和父亲聊天并收到回复,而且父亲在回复中的口吻与语气,就仿佛还「活着」一样. 这并不是恐怖片剧情,而是科技的魔幻力量:回 ...
- BUAA-OO-2019 第三单元总结
JML语言理论基础梳理及工具链 注释结构 JML以javadoc注释的方式来表示规格,每行都以@起头. 行注释://@annotation 块注释:/* @ annotation @*/ JML表达式 ...
- 7.JavaScript-Promise的并行和串行
Promise 并行 Promise.all是所有的Promise执行完毕后(reject|resolve)返回一个Promise对象. 最近在开发一个项目中,需要等接口拿到全部数据后刷新页面,取消l ...
- linux 如何修改默认的FTP帐号或密码
wdlinux_lamp,wdlinux_lnmp的系统安装好后,默会创建一个FTP用户用户名是:wdlinux密码是:wdlinux.cn 如想修改密码或用户名,先找个ssh工具,有关ssh客户端的 ...
- 渗透 Facebook 的思路与发现
0x00 写在故事之前 身一位渗透测试人员,比起 Client Side 的弱点,我更喜欢 Server Side 的攻击,能够直接控制服务器并获得权限操作 SHELL 才爽 . 当然一次完美的渗透出 ...