【河北省队互测】 gcd BZOJ 2818
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
思路
最近看了很多关于gcd和mod的题目。
通过最近几道题目了解了很多=。=
首先有这么一个性质:如果a∈[1,n],b∈[1,m],那么gcd(a,b)|k的有(n/k)*(m/k)组。
那么令f[x]为gcd(a,b)==k的组数,f[k]=(n/k)*(m/k)-f[2k]-f[3k]-f[4k]……
对于这一题来说。。好像是并不可以过的。
那么就有别的性质:
如果a,b∈[1,n],gcd(a,b)==k的组数等价于a,b∈[1,n/k],gcd(a,b)==1的组数。
这就很好求了吧,就是1->n的phi值之和(欧拉函数)*2-1。
首先每组数必须要算两遍,比如(3,5)和(5,3),所以要*2。然后(1,1)不要算两遍,所以再-1。
然后就是如何求出1-n中所有的质数以及欧拉函数了。现场学习线性筛。。
其实我完全不理解啊。。先记住好了。。核心代码如下:
phi[]=;memset(is_prime,true,sizeof(is_prime));
for(int i=;i<=n;i++){
if (is_prime[i]){
phi[i]=i-;
prime[++cnt]=i;
}
for(int j=;j<=cnt&&i*prime[j]<=n;j++){
is_prime[i*prime[j]]=false;
if (i%prime[j]!=) phi[i*prime[j]]=phi[i]*(prime[j]-);
else{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
}
}
线性筛
应该没写错吧。。为了加强记忆默写的。。如果有问题就看下面的那个版本吧,那个是AC了的。
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <list>
#include <vector>
#include <ctime>
#include <functional>
#define pritnf printf
#define scafn scanf
#define sacnf scanf
#define For(i,j,k) for(int i=(j);i<=(k);(i)++)
#define Clear(a) memset(a,0,sizeof(a))
using namespace std;
typedef unsigned int Uint;
const int INF=0x3fffffff;
///==============struct declaration============== ///==============var declaration=================
const int MAXN=;
int n,tot=,ans=;
int prime[MAXN];
long long phi[MAXN];
bool is_prime[MAXN];
///==============function declaration============
void Init();
///==============main code=======================
int main()
{
//#define FILE__
#ifdef FILE__
freopen("input","r",stdin);
freopen("output","w",stdout);
#endif
scanf("%d",&n);
Init();
for(int i=;i<=n;i++) phi[i]+=phi[i-];
long long ans=;
for(int i=;i<=tot;i++)
ans+=phi[n/prime[i]]*-;
printf("%lld\n",ans);
return ;
}
///================fuction code====================
void Init(){
memset(is_prime,true,sizeof(is_prime));phi[]=;
for(int i=;i<=n;i++){
if (is_prime[i]){
phi[i]=i-;
prime[++tot]=i;
}
for(int j=;j<=tot;j++){
if (i*prime[j]>n) break;
is_prime[i*prime[j]]=false;
if (i%prime[j]==){
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else
phi[i*prime[j]]=phi[i]*(prime[j]-);
}
}
}
BZOJ2818
不要问我那些性质是为什么。。我也布吉岛(╯‵□′)╯︵┻━┻
【河北省队互测】 gcd BZOJ 2818的更多相关文章
- GCD BZOJ2818 [省队互测] 数学
题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入样例#1: 复制 4 ...
- 题解 P6271 [湖北省队互测2014]一个人的数论
通过这道题学了伯努利数,写篇题解推一下 题目 先推一下式子 \[\sum_{i=1}^ni^d[gcd(i,n)=1] \] \[\sum_{i=1}^{n}i^d\sum_{k|i}\sum_{k| ...
- [bzoj3670][2014湖北省队互测week2]似乎在梦中见过的样子
Description 已知一个字符串S,求它有多少个形如A+B+A的子串(len(A)>=k,len(B)>=1 ). Input 第一行一个字符串,第二行一个数 k. Output 仅 ...
- bug运输[辽宁2014年省队互测一]
奇奇怪怪的题目,不知道他要我们干什么. 我们观察一波局势,发现答案最大不过5.因为如果答案是6或以上的话,我们就至少要2^(5*5)个5*5的方格. 仔细计算一波时间复杂度,再信仰一波,坚信暴力压正解 ...
- STOI补番队互测#2
Round2轮到我出了>_<(目测总共10人参加 实际共七人) 具体情况: #1: KPM,360 #2:ccz181078,160 #3:child,150 可惜KPM没看到第一题样例里 ...
- 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 MBSubmit: 3241 Solved: 1437[Submit][Status][Discuss ...
- Bzoj 2818: Gcd(莫比乌斯反演)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对 ...
- BZOJ 2818
2818:GCD Description 给定整数$N$,求$1\le x,y\le N$且$\gcd{x,y}$为素数的数对$(x,y)$有多少对. Input $N$ Output RT Samp ...
随机推荐
- 使用Bandwagon的VPS第一件事《FQ》
说点闲话:昨天的长靴子到了,哎呀,今天那个高兴,踩着我的8厘米的过膝靴就出门上专业外语去了,扎了个麻花辫子,那个心情好哟,搞得我都不想继续学习linux平台上的C语言了,好想逛街----秀秀我的鞋子, ...
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- javaWeb实现登录功能
1.三要素 (1) 入口 就是我们所在的页面 入口到处理的数据请求会出现乱码,用request.SetCharacterEncoding("UTF-8");来解决,仅仅是用用于Po ...
- 用vue.js学习es6(六):Iterator和for...of循环
一.Iterator (遍历器)的概念: 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只 要部署Iterator接口,就可以完成遍历操 ...
- ceph hadoop spark 大数据处理
http://docs.ceph.com/docs/giant/cephfs/hadoop/ https://indico.cern.ch/event/524549/contributions/218 ...
- neo4j关闭和开启密码访问权限
本例:neo4j-enterprise-2.3.1版本 neo4j默认安装是开启访问密码验证 可以发现,在conf/下的neo4j-server.properties配置文件 # Require (o ...
- html5存储方式localstorage和sessionStorage
html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage. 区别:localStorage无时间限制,除非主动删除数据,否则永不过期:sessio ...
- 架构师养成记--14.重入锁ReentrantLock 和 读写锁 ReentrantReadWriteLock
ReentrantLock 有嗅探锁定和多路分支等功能,其实就是synchronized,wait,notify的升级. this锁定当前对象不方便,于是就有了用new Object()来作为锁的解决 ...
- Thymeleaf
1.在html顶部添加 <html xmlns:th="http://www.thymeleaf.org"> 2.url表达式 @{...} <link rel= ...
- 基于jQuery的Validate表单验证
表单验证可以说在前端开发工作中是无处不在的~ 有数据,有登录,有表单, 都需要前端验证~~ 而我工作中用到最多的就是基于基于jQuery的Validate表单验证~ 就向下面这样~ 因为今天有个朋 ...