[洛谷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] ...
随机推荐
- 浅谈css蒙版效果
我们进网站浏览时经常看到当鼠标悬浮在图片上或者某一个地方时,会出现一层朦胧现象覆盖着悬浮位置,简单的理解为“蒙版效果”.下面简单列举实现过程: HTML: CSS:
- ThinkPHP创建应用
新建一个文件 引入ThinkPHP文件
- Mysql基础3-数据操作语言DML-数据查询语言DQL
主要: 数据操作语言DML 数据查询语言DQL 数据操作语言DML DML: Data Mutipulation Language 插入数据(增) 一般插入数据形式 1)形式1: insert [in ...
- Could not obtain transaction-synchronized Session for current thread 错误的解决方法!
BsTable bsTable = new BsTable(); // String time = request.getParameter("date"); String tim ...
- python3爬虫之开篇
写在前面的话: 折腾爬虫也有一段时间了,从一开始的懵懵懂懂,到现在的有一定基础,对于这一路的跌跌撞撞,个人觉得应该留下一些文字性的东西,毕竟好记性不如烂笔头,而且毕竟这是吃饭的家伙,必须用心对待才可以 ...
- 计蒜客-----跳跃游戏(C语言)
/********************************************************给定一个非负整数数组,假定你的初始位置为数组第一个下标.数组中的每个元素代表你在那个位 ...
- rhel6.4扩充swap分区
状况:Red hat 6.4 swap分区不足 解决:扩充swap ================================================================== ...
- 单调队列优化dp
洛谷p3800(单调队列优化DP) 题目背景 据说在红雾异变时,博丽灵梦单身前往红魔馆,用十分强硬的手段将事件解决了. 然而当时灵梦在Power达到MAX之前,不具有“上线收点”的能力,所以她想要知道 ...
- 【python3.X】python学习中排雷过程^_^
问题一:python读取文件时报错:“UnicodeDecodeError: 'gbk' codec can't decode byte 0x8d in position 52: illegal mu ...
- 从一个线上服务器警告谈谈backlog
缘起 双十一如期而至,此时的我因为在处理客户的一个问题已经陷入了忙碌.突然,不断接到驻场实施发来的反馈,都是相同的反馈--"客户端操作缓慢". 我现在负责的服务器是一台接口服务器, ...