【洛谷】P2568 GCD
前言
耻辱,我这个OI界的耻辱!
题目描述
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对.
输入格式
一个整数N
输出格式
答案
输入输出样例
输入
4
输出
4
说明/提示
对于样例(2,2),(2,4),(3,3),(4,2)
1<=N<=10^7
分析
刚学(抄)完莫比乌斯反演做完P2522和P3455的我刚看到这个题第一反应竟然是
这不是个莫比乌斯反演的板子题吗 <----zz言论
看我切了他 <----zz行为
瞄了一眼算法标签额。。。嗯?????欧拉函数???前缀和???

于是老老实实想出了正常点的解法,写个博客记录一下自己的zz行为(免得今年csp上写一个莫比乌斯反演出来
首先$\gcd (a,b)$为素数,那么$a$与$b$肯定只有1与$\gcd (a,b)$这两个公约数,
不妨考虑$\gcd (a,b)=1$,然后$a$和$b$同时乘上一个素数即可
考虑每个数的贡献。为了防止算重复,每个数只计算比它小的数。
根据欧拉函数的定义可知,对于一个数$a$,有$\varphi (a)$个比它小且与它互质的数
这$\varphi (a)$个数每个数乘上一个素数$p$,与$ap$的$gcd$都是素数$p$,都会对答案造成贡献
而且只要$ap<=n$,其它数都小于等于$n$。
所以对于每个数$a$,枚举最大的素数$p$满足$ap<=n$,如果$p$是第$k$个质数,$\varphi (a)k$就是$a$的贡献。
从小到大枚举$a$,那么对应的$p$肯定从大到小递减,具有单调性,可以$O(n)$计算。
另外,还要每个素数与自己取$gcd$的情况也要计算。
Code
#include<cstdio>
int n,p[],phi[],unp[];
long long ans;
void prework()
{
unp[]=phi[]=;
for(int i=;i<=n;i++)
{
if(!unp[i])p[++p[]]=i,phi[i]=i-;
for(int j=;1ll*p[j]*i<=n;j++)
{
unp[p[j]*i]=;
if(i%p[j])phi[p[j]*i]=(p[j]-)*phi[i];
else {phi[p[j]*i]=p[j]*phi[i];break;}
}
}
}
int main()
{
scanf("%d",&n);prework();
for(int i=,j=p[];i<=n;i++)
{
while(1ll*p[j]*i>n&&j)j--;
ans+=1ll*phi[i]*j;
}
printf("%lld\n",ans*+p[]);
}
【洛谷】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
题目大意:给你$n(1\leqslant n\leqslant 10^7)$,求$\displaystyle\sum\limits_{x=1}^n\displaystyle\sum\limits_{y ...
- 洛谷 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] ...
随机推荐
- jQuery 名称发生冲突怎么办【问题】
[问题]jQuery 名称发生冲突怎么办? [答案]jQuery 使用 $ 符号作为 jQuery 的简介方式.某些其他 JavaScript 库中的函数(比如 Prototype)同样使用 $ 符号 ...
- Fatal error: Uncaught Error: Call to a member function bind_param() on boolean
1.2019年10月22日 PHP写mysqli 预编译查询的时候报错. Fatal error: Uncaught Error: Call to a member function bind_par ...
- Qt 利用飞机图片画五边形
最近练习Qt,需要一个飞机在屏幕上画五边形.虽然达到的效果不是非常的理想,但是勉强还是达到了效果,欢迎大家指正.用到的飞机图片如下. 第一步:初始化,在构造函数里面,把图片向左旋转18° );ui.l ...
- Ldr和bl指令
Ldr和bl在启动程序中,都是可以负责pc跳转的指令. 1)bl是地址无关指令,和什么地址无关呢?和当前的运行地址无关,链接器脚本中标明了一个运行地址,但是arm中的代码实际是从地址0开始运行的.这个 ...
- jenkins节点添加
https://blog.csdn.net/bbwangj/article/details/81203381
- Python——Str
在Python内存中,字符串是以unicode形式存储的. str格式,最常用的数据类型格式,分别有 (' ') 引号 ,(" ")双引号,(''' ''')三引号 开头和结尾的引 ...
- mysql 压力测试工具sysbench
2.1 只读示例 ./bin/sysbench --test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=1 ...
- vi / vim 字符替换详解
:s/idoxu/isTester.com/g 替换当前行所有 idoxu 为 isTester.com :n,$s/idoxu/isTester.com/ #替换第 n 行开始到最后一行中每一行的第 ...
- 用js刷剑指offer(把数组排成最小的数)
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 思路 对ve ...
- Problem G: STL——整理唱片(list的使用)
#include<iostream> #include<list> #include<iterator> #include<algorithm> usi ...