【BZOJ-2818】Gcd 线性筛
2818: Gcd
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 3347 Solved: 1479
[Submit][Status][Discuss]
Description
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.
Input
一个整数N
Output
如题
Sample Input
Sample Output
HINT
hint
对于样例(2,2),(2,4),(3,3),(4,2)
1<=N<=10^7
Source
Solution
首先,所求的是$\sum_{i=1}^{N}\sum_{j=1}^{N}\left [ gcd\left ( i,j \right )= p \right ]$
那么转化一下就可以得到$\sum_{i=1}^{N}\sum_{j=1}^{N}\left [ gcd\left ( \frac{i}{p},\frac{j}{p} \right )= 1 \right ]$
那么我们定义$f\left [ i \right ]$表示1~i中满足$gcd\left ( x,y \right )= 1$的个数
那么很显然可以得到 $f\left [ i \right ]= 1+2*\sum_{j=1}^{i}\varphi \left ( j \right )$
上述式子很好想,考虑$\varphi$的定义,以及$gcd\left ( a,b \right )= gcd\left ( b,a \right )$再考虑$\left ( 1,1 \right )$的情况
所以很显然,结果就是$\sum_{i=1}^{cnt}f\left [ \frac{n}{prime[i]]} \right ]$
值得注意的是,不要计算重复,具体的看代码即可
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 10000010
int prime[maxn],cnt;long long phi[maxn],f[maxn];
bool flag[maxn];
void prework(int n)
{
phi[]=; flag[]=; f[]=;
for (int i=; i<=n; i++)
{
if (!flag[i]) prime[++cnt]=i,phi[i]=i-;
for (int j=; j<=cnt&&i*prime[j]<=n; j++)
{
flag[i*prime[j]]=;
if (!(i%prime[j]))
{phi[i*prime[j]]=phi[i]*prime[j];break;}
else
phi[i*prime[j]]=phi[i]*(prime[j]-);
}
}
for (int i=; i<=n; i++) phi[i]+=phi[i-];
for (int i=; i<=n; i++) f[i]=+*phi[i];
}
void work(int n)
{
long long ans=;
for (int i=; i<=cnt; i++)
if (n/prime[i]) ans+=f[n/prime[i]];
printf("%lld\n",ans);
}
int main()
{
int n;
scanf("%d",&n);
prework(n+); work(n);
return ;
}
简单数论!一点都不慌
【BZOJ-2818】Gcd 线性筛的更多相关文章
- bzoj 2818 gcd 线性欧拉函数
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 给定整数N,求1< ...
- BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes银幕)
标题效果:定整N(N <= 1e7),乞讨1<=x,y<=N和Gcd(x,y)素数的数(x,y)有多少.. 思考:推,. 建立gcd(x,y) = p,然后,x / p与y / p互 ...
- BZOJ 2818 GCD 素数筛+欧拉函数+前缀和
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 题意:给定整数N,求1<=x,y<=n且Gcd(x,y)为素数的数对( ...
- BZOJ 2818 Gcd 线性欧拉
题意:链接 方法:线性欧拉 解析: 首先列一下表达式 gcd(x,y)=z(z是素数而且x,y<=n). 然后我们能够得到什么呢? gcd(x/z,y/z)=1; 最好还是令y>=x 则能 ...
- 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 MBSubmit: 3241 Solved: 1437[Submit][Status][Discuss ...
- BZOJ 2818: Gcd
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4443 Solved: 1960[Submit][Status][Discuss ...
- BZOJ 2818 Gcd(欧拉函数+质数筛选)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 9108 Solved: 4066 [Submit][Status][Discu ...
- BZOJ 2190 仪仗队(线性筛欧拉函数)
简化题意可知,实际上题目求得是gcd(i,j)=1(i,j<=n)的数对数目. 线性筛出n大小的欧拉表,求和*2+1即可.需要特判1. # include <cstdio> # in ...
- BZOJ 2818 GCD 【欧拉函数 || 莫比乌斯反演】
传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 2818: Gcd Time Limit: 10 Sec Memory Limit ...
随机推荐
- POJ 1847 Tram --set实现最短路SPFA
题意很好懂,但是不好下手.这里可以把每个点编个号(1-25),看做一个点,然后能够到达即为其两个点的编号之间有边,形成一幅图,然后求最短路的问题.并且pre数组记录前驱节点,print_path()方 ...
- 两道相似KMP题
1.POJ 3450 Coporate Identity 这两题的解法都是枚举子串,然后匹配,像这种题目以后可以不用KMP来做,直接字符串自带的strstr函数搞定,如果字符串未出现,该函数返回NUL ...
- tp空操作和空控制器处理
TP框架几个重要文件:index.php,ThinkPHP.php,Library/Think/Think.class.php,Library/Think/App.class.php,conversi ...
- flex布局滑动页面
html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 010医疗项目-模块一:用户添加的实现(Dao,Service,Action,增加页面调试,提交页面调试)
要实现的效果:
- 【原创】有关Silverlight DataGrid双击事件的分析 完整分析 代码与示例
公司项目用的silverlight,而且silverlight一些技术 资料比较少.所以分享出来 给大家参考参考. 有关Silverlight中DataGrid 双击事件 的代码 如下: 1. 前台x ...
- IP包格式
网络层提供的服务就是在不同网段之间转发数据包. Ip包结构 1,格式(每行4byte*5) 2,版本 V4 V6 3,首部长度 20(固定)+可变长度 ,区分服务 Win2008开始:gpedit. ...
- IPAdr.exe注册机[PY]
算法还原: a =raw_input('enter the string: \n') num =len(a) All_c=0 for i in range(0,num,1): b =ord(a[i]) ...
- 实现可以滑动的GrildView,类似美团网首页的GrildView功能菜单
首先上实现效果图,不会做动态图,就先凑合着看吧 使用了网上的一个开源控件viewpagerindicator,可以自定义切换时候显示的标记,圆点,或者下划线. GrildView显示的是手机上的全部a ...
- openssl实践总结
openssl实验总结 OPENSSL简介 OpenSSL项目是一个协作开发一个健壮的,商业级的,全功能的,并且开放源代码工具包,它实现了安全套接字层(SSL v2/v3)和传输层安全(TLS v1) ...