BZOJ 2818 GCD 【欧拉函数 || 莫比乌斯反演】
传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2818
2818: Gcd
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 9236 Solved: 4126
[Submit][Status][Discuss]
Description
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.
Input
一个整数N
Output
如题
Sample Input
Sample Output
HINT
对于样例(2,2),(2,4),(3,3),(4,2)
1<=N<=10^7
解题思路:
老套路:GCD( x, y ) = p 转换成 GCD( x/p, y/p ) = 1;
那么按照原来的配方,我们需要枚举 x/p 或者 y/p 其中一个数,然后另外一个数的总数通过欧拉函数求得。
假设选择枚举 y/p ,那么还需要暴力一遍枚举素数。(一开始就是直接暴力。。。)
然而O( n ) 内可以同时筛出素数和欧拉函数值:https://oi.abcdabcd987.com/sieve-prime-in-linear-time/
同时记录一下欧拉函数前缀和 sum[k] ,根据上面的转换我们可知:
如果给出 x <= y ,则直接枚举素数枚举y,然后欧拉函数求所有方案数即可;
但是这里没有明确表明 x 和 y 的大小关系, 但是我们还是只求一半 即 (默认 x <= y)的情况,然后这个答案乘以 2 就是 (y <= x)的情况了,需要去一下重(即 x = y = 1)的情况。
枚举 素数 p ,求 [ 1, N/p ] 中互质的数对的总数, 即 2*sum[ N/p ] - 1;
AC code:
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int MAXN = 1e7+;
bool com[MAXN];
int primes, prime[MAXN], phi[MAXN];
LL sum[MAXN]; void get_phi(int n){
phi[] = ;
for (int i = ; i <= n; ++i)
{
if (!com[i])
{
prime[primes++] = i;
phi[i] = i-;
}
for (int j = ; j < primes && i*prime[j] <= n; ++j)
{
com[i*prime[j]] = true;
if (i % prime[j])
phi[i*prime[j]] = phi[i]*(prime[j]-);
else
{ phi[i*prime[j]] = phi[i]*prime[j]; break; }
}
//sum[i] = sum[i-1]+phi[i];
}
}
int main()
{
int N;
scanf("%d", &N);
get_phi(N);
sum[] = ;
for(int i = ; i <= N/; i++){
sum[i] = sum[i-]+phi[i];
// phi[i] = phi[i-1]+phi[i];
}
// printf("%d\n", phi[1]);
LL ans = ;
for(int i = ; i < primes; i++){
ans = ans + (sum[N/prime[i]]*-);
}
printf("%lld\n", ans); return ;
}
BZOJ 2818 GCD 【欧拉函数 || 莫比乌斯反演】的更多相关文章
- ACM学习历程—HYSBZ 2818 Gcd(欧拉函数 || 莫比乌斯反演)
Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sam ...
- 洛谷P2568 GCD (欧拉函数/莫比乌斯反演)
P2568 GCD 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入 ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
- BZOJ 2818 Gcd(欧拉函数+质数筛选)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 9108 Solved: 4066 [Submit][Status][Discu ...
- UVA11426 GCD - Extreme (II) (欧拉函数/莫比乌斯反演)
UVA11426 GCD - Extreme (II) 题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 10 100 200000 0 输出样例#1: 67 13 ...
- 51nod 1237 最大公约数之和 V3【欧拉函数||莫比乌斯反演+杜教筛】
用mu写lcm那道卡常卡成狗(然而最后也没卡过去,于是写一下gcd冷静一下 首先推一下式子 \[ \sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j) \] \[ \sum_{i= ...
- 中国剩余定理 & 欧拉函数 & 莫比乌斯反演 & 狄利克雷卷积 & 杜教筛
ssplaysecond的博客(请使用VPN访问): 中国剩余定理: https://ssplaysecond.blogspot.jp/2017/04/blog-post_6.html 欧拉函数: h ...
- bzoj 2818 Gcd(欧拉函数 | 莫比乌斯反演)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2818 [题意] 问(x,y)为质数的有序点对的数目. [思路一] 定义f[i]表示i之 ...
- hdu6390 /// 欧拉函数+莫比乌斯反演 筛inv[] phi[] mu[]
题目大意: 给定m n p 求下式 题解:https://blog.csdn.net/codeswarrior/article/details/81700226 莫比乌斯讲解:https://ww ...
随机推荐
- api下载文件
net /// <summary> ///字符流下载方法 /// </summary> /// <param name="fileName">下 ...
- Angular4 step by step.3
1.Routes 路由模块 import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angul ...
- [android] 练习样式主题自定义activity切换动画
主要练习了自定义样式和主题,继承android系统默认的样式并修改,练习xml定义淡入淡出动画 anim/fade_in.xml <?xml version="1.0" en ...
- Java线程入门第三篇
Java内存模型(jmm) Why:保证多线程正确协同工作 看图说明: 文字解释:线程a和线程b通信过程,首先线程a把本地内存的共享变量更新到主内存中,然后线程b去读取主内存的共享变量,最后更新到自己 ...
- 互联网轻量级框架SSM-查缺补漏第九天
简言: 第九章 Spring Ioc的概念 IoC(Inversion of Control)控制反转:比如想喝橙汁,在没有饮品店的日子,最直观的做法是买果汁机.橙汁.这是你自己“主动”创造的过程,也 ...
- 获取指定包名下继承或者实现某接口的所有类(扫描文件目录和所有jar)
import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.net.JarURLCo ...
- flask接收前台的ajax的post数据
html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8& ...
- mysql索引是什么?索引结构和使用详解
索引是什么 mysql索引: 是一种帮助mysql高效的获取数据的数据结构,这些数据结构以某种方式引用数据,这种结构就是索引.可简单理解为排好序的快速查找数据结构.如果要查“mysql”这个单词,我们 ...
- JSTL数据格式化
日期表示 <fmt:formatDate value="${DATE1}" pattern="yyyy-MM-dd hh:mm:ss" type=&quo ...
- Linux下C语言操作MySQL数据库
MySQL是Linux系统下广泛使用的开源免费数据库,是Linux应用程序数据存储的首选. Ubuntu下安装 […]