AcWing 220. 最大公约数 | 欧拉函数
题目描述
给定整数N,求1<=x,y<=N且GCD(x,y)为素数的数对(x,y)有多少对。
GCD(x,y)即求x,y的最大公约数。
输入格式
输入一个整数N
输出格式
输出一个整数,表示满足条件的数对数量。
数据范围
1≤N≤10^7
输入样例:
4
输出样例:
4
题解:本题要求1<=x,y<=N且GCD(x,y)为素数的数对(x,y)数量,相当于求:对于N以内的每一个素数p,1<=x,y<=N/p 中GCD(x,y)为1的数对(x,y)数量和。我们知道欧拉函数的定义是1~n中与n互质的数的个数,那么对于p,1<=x,y<=N/p 中GCD(x,y)为1的数对(x,y)数量为φ(1)+φ(2)...+φ(N/p),可以用前缀和计算。要注意:x,y大小关系无影响所以要*2,但x,y相同时只算一次所以要-1。题目就变成了求\[\sum_{p是素数}^{p≤n} 2*\sum_{i=1}^{n/p}φ(i) -1\] 也可以用\[\sum_{p是素数}^{p≤n} 2*\sum_{i=2}^{n/p}φ(i) +1\]。
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e7 + ;
int v[N],prime[N];
ll sum[N],phi[N];
int cnt = ;
int main() {
int n;
scanf("%d",&n);
phi[]=;
for (int i = ; i <= n; i++) {
if(!v[i]) {
v[i] = i;prime[cnt++] = i;
phi[i] = i-;
}
for (int j = ; j < cnt; j++) {
if (prime[j] > v[i] || prime[j] > n/i) break;
v[i*prime[j]] = prime[j];
phi[i*prime[j]] = phi[i] * (i%prime[j]?prime[j]-:prime[j]);
}
}
for (int i = ; i <= n; i++)
sum[i] = sum[i-]+phi[i];
ll ans = ;
for (int i = ; i < cnt; i++) {
int num = n/prime[i];
ans += *sum[num]-;
}
printf("%lld\n",ans);
return ;
}
AcWing 220. 最大公约数 | 欧拉函数的更多相关文章
- AcWing 220.最大公约数 欧拉函数打卡
题目:https://www.acwing.com/problem/content/222/ 题意:求1-n范围内,gcd(x,y)是素数的对数 思路:首先我们可以针对每个素数p,那么他的贡献应该时 ...
- AcWing 874. 筛法求欧拉函数
#include<bits/stdc++.h> using namespace std; typedef long long ll; ; int primes[N],cnt; int ph ...
- 51nod 1040最大公约数和(欧拉函数)
1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 给出一个n,求1-n这n个数,同n的最大公约数 ...
- 51nod 1040 最大公约数之和(欧拉函数)
1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出一个n,求1-n这n个数,同n的最大公约数的和.比如: ...
- 51nod 1040 最大公约数的和 欧拉函数
1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 给出一个n,求1-n这n个数,同n的最大公约数 ...
- acwing 873. 欧拉函数 模板
地址 https://www.acwing.com/problem/content/875/ 给定n个正整数ai,请你求出每个数的欧拉函数. 欧拉函数的定义 输入格式 第一行包含整数n. 接下来n行, ...
- 51nod1040 最大公约数之和,欧拉函数或积性函数
1040 最大公约数之和 给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6时,1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 看起来很简单 ...
- BZOJ 最大公约数 (通俗易懂&效率高&欧拉函数)
题目 题目描述 给定整数\(N\),求\(1 \le x,y \le N\)且\(gcd(x,y)\)为素数的数对\((x,y)\)有多少对. \(gcd(x,y)\)即求\(x,y\)的最大公约数. ...
- 【洛谷 P1390】 公约数的和 (欧拉函数)
题目链接 做过\(n\)遍这种题了... 答案就是\(\sum_{i=1}^{n}\sum_{j=1}^{n/i}[\varphi(j)*i]\) 线筛欧拉函数求前缀和直接算就行. #include ...
随机推荐
- Git Commit Message 规范
今天来说说团队开发中,对于 Git commit message 规范问题. 社区上有各种 Commit message 的规范,本文介绍 Angular 规范,目前使用较广,比较合理和系统化,并且有 ...
- Pytorch | BERT模型实现,提供转换脚本【横扫NLP】
<谷歌终于开源BERT代码:3 亿参数量,机器之心全面解读>,上周推送的这篇文章,全面解读基于TensorFlow实现的BERT代码.现在,PyTorch用户的福利来了:一个名为Huggi ...
- 读取Flex AIR应用程序设置
说明: 本人之前做过一年的Flex AIR移动跨平台开发,在之前学习过程中,一直是将笔记记在了Evernote上,有的笔记是自己写的,也有的笔记是在网上看到,顺手记下了的. 所以在这里声明下,如果在网 ...
- HDU 2674
0 <= N<=10^9 看到这个数据范围知道常规方法肯定做不出来. 不过一想想既然是mod2009,是不是只要其中含有一个2009,那么其结果一定是0了呢 说了这里思路,就是看什么时候出 ...
- java面向接口编程之适配器模式
使用一个现成的类,但是它的接口不完全符合你的需求,我只想要它其中的一个方法,不想覆写其他的方法. 比如,窗体有变大,变小,关闭的行为,但是我现在只需要关闭行为; package reviewDem ...
- html设置<input type="text">内的内容自动为大写
添加css样式:text-transform:uppercase;可以实现自动转换为大写样式. 但是input 的value还是小写的,因为它是CSS样式. <input type=" ...
- dotnet 通过 WMI 获取系统安装软件
本文告诉大家如何通过 WMI 获取系统安装的软件,这个方法不能获取全部的软件 通过 Win32_Product 可以获取系统安装的软件 var mc = "Win32_Product&quo ...
- H3C 示例:计算子网内可用地址数
- linux 延后执行
设备驱动常常需要延后一段时间执行一个特定片段的代码, 常常允许硬件完成某个任务. 在这一节我们涉及许多不同的技术来获得延后. 每种情况的环境决定了使用哪种技术最好; 我们全都仔细检查它们, 并且指出每 ...
- TOJ 6121: 学长的情书 ( 二分)
传送门: 点我 6121: 学长的情书 时间限制(普通/Java):2000MS/6000MS 内存限制:65536KByte总提交: 79 测试通过:2 描述 抹布收 ...