2818: Gcd
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 4443 Solved: 1960
[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
分析:
枚举质数,然后问题转化为了gcd(x,y)=i的数对个数...
我只能想到这里了...QAQ还是我水...交完发现自己的跑的很慢...上榜的都是1s以内跑完的,我跑了5s...
看hzwer的blog发现还有复杂度更低的做法...
以下摘自hzwer的blog...
枚举每个素数,然后每个素数p对于答案的贡献就是(1 ~ n / p) 中有序互质对的个数
而求1~m中有序互质对x,y的个数,可以令y >= x, 当y = x时,有且只有y = x = 1互质,当y > x时,确定y以后符合条件的个数x就是phiy
所以有序互质对的个数为(1 ~ n/p)的欧拉函数之和乘2减1(要求的是有序互质对,乘2以后减去(1, 1)多算的一次)
那么就只需要先筛出欧拉函数再求个前缀和就可以了
巨机啊...还是我太水了TAT...
代码:
#include<algorithm>
#include<cstring>
#include<cstdio>
//by NeighThorn
using namespace std;
//大鹏一日同风起,扶摇直上九万里 const int maxn=+; int n,cnt,vis[maxn],miu[maxn],prime[maxn]; long long ans=; signed main(void){
scanf("%d",&n);miu[]=;cnt=;
for(int i=;i<=;i++){
if(!vis[i])
vis[i]=,prime[++cnt]=i,miu[i]=-;
for(int j=;j<=cnt&&prime[j]*i<=;j++){
vis[i*prime[j]]=;
if(i%prime[j]==){
miu[i*prime[j]]=;break;
}
miu[i*prime[j]]=-miu[i];
}
}
for(int i=;i<=;i++)
miu[i]+=miu[i-];
for(int i=;i<=cnt&&prime[i]<=n;i++){
int lala=n/prime[i];
for(int d=,r;d<=lala;d=r+){
r=lala/(lala/d);
if(r>lala)
r=lala;
ans+=(long long)(miu[r]-miu[d-])*(lala/d)*(lala/d);
}
}
printf("%lld\n",ans);
return ;
}
By NeighThorn
BZOJ 2818: Gcd的更多相关文章
-
BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
-
bzoj 2818: Gcd GCD(a,b) = 素数
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1566 Solved: 691[Submit][Status] Descript ...
-
bzoj 2818: Gcd 歐拉函數
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1633 Solved: 724[Submit][Status] Descript ...
-
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 MB Submit: 9108 Solved: 4066 [Submit][Status][Discu ...
-
bzoj 2818 gcd 线性欧拉函数
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 给定整数N,求1< ...
-
BZOJ 2818: Gcd 筛法
2818: Gcd 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2818 Description 给定整数N,求1<=x,y< ...
-
BZOJ 2818 GCD 【欧拉函数 || 莫比乌斯反演】
传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 2818: Gcd Time Limit: 10 Sec Memory Limit ...
-
BZOJ 2818 Gcd (莫比乌斯反演 或 欧拉函数)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 2534 Solved: 1129 [Submit][Status][Discu ...
随机推荐
-
用Maven新建Web项目时报错
在cmd下,用mvn命令 mvn archetype:create -DgroupId=org.seckill -DartifactId=seckill -DarchetypeArtifactId=m ...
-
HTML文件基本结构
固定结构: <html> <head>...</head> <body>...</body> </html>1,<html ...
-
angularJS通过post方法下载excel文件
最近工作中遇到,要使用angularJS的post方法来下载excel的情况.网上找到一个帖子:http://*.com/questions/22447952/angularj ...
-
Swift学习笔记十六:协议
Protocol(协议)用于统一方法和属性的名称,而不实现不论什么功能. 协议可以被类.枚举.结构体实现.满足协议要求的类,枚举,结构体被称为协议的遵循者. 遵循者须要提供协议指定的成员,如属性,方法 ...
-
mysql三张表关联查询
三张表,需要得到的数据是标红色部分的.sql如下: select a.uid,a.uname,a.upsw,a.urealname,a.utel,a.uremark, b.rid,b.rname,b. ...
-
同时安装多个的Mysql的实现方法
首写修改my.ini文件 修改这几项即可 [client] port= [mysql] default-character-set=utf8 [mysqld] port= server_id= 全文如 ...
-
远程桌面连接报错:出现身份验证错误,要求函数不受支持,由于CredSSP加密Oracle修正。
远程桌面连接错误: 解决方法: 1.在运行中输入gpedit.msc,启动本地组策略编辑器. 2.定位到计算机—管理模板—系统—凭据分配 3.点凭据分配—加密Oracle修正. 4.加密Oracle修 ...
-
Eclipse配置开发Go的插件——Goclipse
引言: 上篇 <Golang快速入门(不用急,但要快)> 我们大致过了一遍Go语言的基本语法,但在开始正式的项目创建前,有必要选择一个比较顺手的 IDE (编辑器),由于之前一直都是做Ja ...
-
MAC升级nodejs和npm到最新版
第一步,先查看本机node.js版本: node -v 第二步,清除node.js的cache: sudo npm cache clean -f 第三步,安装 n 工具,这个工具是专门用来管理node ...
-
Logstash之一:入门介绍
简介 Logstash是一个接收,处理,转发日志的工具.支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型.怎么样听起来挺厉害的吧?在一个典型的使用场景下(EL ...