[洛谷P2568]GCD
题目大意:给你$n(1\leqslant n\leqslant 10^7)$,求$\displaystyle\sum\limits_{x=1}^n\displaystyle\sum\limits_{y=1}^n[(x,y)\in \rm prime]$($(a,b)$为$a,b$的$gcd$)
题解:可以用莫比乌斯反演来做,同这道题,只需要把$m$改成$n$就行了
卡点:无
C++ Code:(莫比乌斯反演)
#include <cstdio>
#include <cstring>
#define maxn 10000010
using namespace std;
int n;
int miu[maxn], plist[maxn], ptot;
int g[maxn];
bool isp[maxn];
void sieve(int n) {
memset(isp, true, sizeof isp);
miu[1] = 1;
for (int i = 2; i < n; i++) {
if (isp[i]) plist[ptot++] = i, miu[i] = -1;
for (int j = 0; j < ptot && i * plist[j] < n; j++) {
int tmp = i * plist[j];
isp[tmp] = false;
if (i % plist[j] == 0) {
miu[tmp] = 0;
break;
}
miu[tmp] = -miu[i];
}
}
for (int i = 0; i < ptot; i++) {
for (int j = 1; j * plist[i] < n; j++)
g[j * plist[i]] += miu[j];
}
for (int i = 2; i <= n; i++) g[i] += g[i - 1];
}
inline int min(int a, int b) {return a < b ? a : b;}
long long solve(int n, int m) {
long long ans = 0;
int i, j;
int tmp = min(n, m);
for (i = 1; i <= tmp; i = j + 1) {
j = min(n / (n / i), m / (m / i));
ans += 1ll * (n / i) * (m / i) * (g[j] - g[i - 1]);
}
return ans;
}
int main() {
sieve(maxn);
scanf("%d", &n);
printf("%lld\n", solve(n, n));
return 0;
}
题解:也可以用也可以用$\phi$函数来做。
$$
若(x,y)==p(p\in \rm prime)
\Rightarrow \big(\dfrac{x}{p},\dfrac{y}{p}\big)==1
$$
线性筛出每个数的$\varphi$,再前缀和一下就行了
注意,若$x<y$$(x,y)==p$和$(y,x)==p$是两种不同的方案,但只会在算$y$时被加上,所以答案要乘二,但是当$x==y$时答案会多算一遍,所以要减去质数的个数
卡点:算$\varphi$时没开$long\;long$
C++ Code:(phi函数)
#include <cstdio>
#include <cstring>
#define maxn 10000010
using namespace std;
int n;
bool isp[maxn];
int plist[maxn], ptot;
long long phi[maxn], ans;
void sieve(int n) {
memset(isp, true, sizeof isp);
phi[1] = 1;
for (int i = 2; i <= n; i++) {
if (isp[i]) {
plist[ptot++] = i;
phi[i] = i - 1;
}
for (int j = 0; j < ptot && i * plist[j] <= n; j++) {
int tmp = i * plist[j];
isp[tmp] = false;
if (i % plist[j] == 0) {
phi[tmp] = phi[i] * plist[j];
break;
}
phi[tmp] = phi[i] * phi[plist[j]];
}
}
}
int main() {
scanf("%d", &n);
sieve(n);
for (int i = 2; i <= n; i++) phi[i] += phi[i - 1];
for (int i = 0; i < ptot; i++) ans += phi[n / plist[i]] << 1;
printf("%lld\n", ans - ptot);
return 0;
}
[洛谷P2568]GCD的更多相关文章
- 洛谷P2568 GCD (欧拉函数/莫比乌斯反演)
P2568 GCD 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入 ...
- 洛谷P2568 GCD(线性筛法)
题目链接:传送门 题目: 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 ...
- 洛谷 P2568 GCD
https://www.luogu.org/problemnew/show/P2568#sub 最喜欢题面简洁的题目了. 本题为求两个数的gcd是素数,那么我们将x和y拆一下, 假设p为$gcd(x, ...
- 洛谷 - P2568 - GCD - 欧拉函数
https://www.luogu.org/problemnew/show/P2568 统计n以内gcd为质数的数的个数. 求 \(\sum\limits_p \sum\limits_{i=1}^{n ...
- 洛谷 P2568 GCD(莫比乌斯反演)
题意:$\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd(i,j)\epsilon prime]$. 对于这类题一般就是枚举gcd,可得: =$\sum_{d\epsilon prim ...
- 洛谷 P2568 GCD 题解
原题链接 庆祝一下:数论紫题达成成就! 第一道数论紫题.写个题解庆祝一下吧. 简要题意:求 \[\sum_{i=1}^n \sum_{j=1}^n [gcd(i,j)==p] \] 其中 \(p\) ...
- 洛谷P2568 GCD(莫比乌斯反演)
传送门 这题和p2257一样……不过是n和m相同而已…… 所以虽然正解是欧拉函数然而直接改改就行了所以懒得再码一遍了2333 不过这题卡空间,记得mu开short,vis开bool //minamot ...
- 洛谷P2398 GCD SUM (数学)
洛谷P2398 GCD SUM 题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入 ...
- 洛谷 P1890 gcd区间
P1890 gcd区间 题目提供者 洛谷OnlineJudge 标签 数论(数学相关) 难度 普及/提高- 题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R] ...
随机推荐
- (转)手游应该怎么做 UI 设计?
之前一直做互动设计,在UI上有一些积累. 转战手游后发现,有着标准.互动方式.用户行为等等与常规大屏UI设计的不同,但是在设计流程,思考方式上是一样的. 以目前项目中一个界面为例(未完成版本)来说一下 ...
- mysql更新返回值问题(更新内容跟之前内容一样,返回0)
mysql更新返回值问题 问: 有一界面要更新个人信息,有几十个text标签需要填写假设有一用户从用户列表点修改进入了修改页面,但又没有修改什么,马上点击保存这时,因为text标签非常多,不能够一一判 ...
- C语言关于指针的注意事项
一.指针的四个关键概念1.指针的类型2.指针指向的类型3.指针的值,也就是指针指向的地址4.指针自己所占用的内存空间注意:指针变量所存的内容就是内存的地址编号! 例如:int **pp = NULL; ...
- aioysql(异步操作MySQL)-python
python异步IO初探 探索异步IO执之前,先说说IO的种类 阻塞IO最简单,即读写数据时,需要等待操作完成,才能继续执行.进阶的做法就是用多线程来处理需要IO的部分,缺点是开销会有些大. 非阻塞I ...
- Flask初见
Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSIG工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 .Flask使用 BSD 授权. Flask也被称为 “m ...
- python2.X与python3.X爬虫常用的模块变化对应
python2 python3 import urllib2 import urllib.request,urllib.error import urllib.request,urllib.error ...
- SQL数据库 面试题
一.sql理论题 1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的.它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化. ...
- 一步一步学Linq to sql(三):增删改
示例数据库 字段名 字段类型 允许空 字段说明 ID uniqueidentifier 表主键字段 UserName varchar(50) 留言用户名 PostTime datetime 留言时间 ...
- [网站日志]当Memcached缓存服务挂掉时性能监视器中的表现
我们用的Memcached缓存服务是阿里云OCS,今天晚上遇到了一次OCS挂掉的情况(计划中的升级),看一下性能监视器中的表现,也许对分析黑色1秒问题有帮助. 应用日志中错误: 2014-06-05 ...
- 安装QC的心(新)路历程 纯记录 无技术
之前就只是看来软件测试原书第二版学习力理论知识,关于书中提到的缺陷管理工具,测试管理工具等也没有亲自去安装使用,感觉太不应该了.于是我就上网了解了一些测试管理工具后,决定先选择QC来学习.说实话,当初 ...