Bzoj 2818: Gcd 莫比乌斯,分块,欧拉函数,线性筛
2016-03-16 18:06
267 查看
2818: Gcd
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3241 Solved: 1437
[Submit][Status][Discuss]
Description
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对.
Input
一个整数NOutput
如题Sample Input
4Sample Output
4HINT
hint对于样例(2,2),(2,4),(3,3),(4,2)
1<=N<=10^7
Source
湖北省队互测题解:
莫比乌斯函数或欧拉函数。
莫比乌斯函数详见 Popoqqq的课件 (Orz Po姐)
之后就自己推公式吧。。。
莫比乌斯函数:
#include<bits/stdc++.h> using namespace std; #define MAXN 10000010 #define LL long long bitset<MAXN> vis; int N,prime[670010],phi[MAXN],tot; LL qz[MAXN]; int read() { int s=0,fh=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')fh=-1;ch=getchar();} while(ch>='0'&&ch<='9'){s=s*10+(ch-'0');ch=getchar();} return s*fh; } void geteular() { int i,j; phi[1]=1;tot=0; for(i=2;i<=N;i++) { if(vis[i]==0) { prime[++tot]=i; phi[i]=i-1; } for(j=1;j<=tot&&prime[j]*i<=N;j++) { vis[prime[j]*i]=1; if(i%prime[j]==0) { phi[prime[j]*i]=phi[i]*prime[j]; break; } phi[prime[j]*i]=phi[prime[j]]*phi[i]; } } } void Qz() { qz[0]=qz[1]=0; for(int i=2;i<=N;i++)qz[i]=qz[i-1]+phi[i]; } int main() { int i,n; LL ans=0; N=read(); geteular(); Qz(); for(i=1;i<=tot;i++) { n=N/prime[i]; ans+=(qz *2+1); } printf("%lld",ans); fclose(stdin); fclose(stdout); return 0; }
View Code
相关文章推荐
- window.open新打开窗口与新开标签页
- css学习中的一些英文单词
- hrbust 1387 Shuffle the Digits【贪心】
- 使用Glide加载图片的时候报错
- 错误: 需要class, interface或enum
- linux系统下运行aapt
- LINUX平台Python安装(一)
- Quartz SimpleTrigger Demo
- 公式VS函数
- iO7以上CIFilter生成二维码
- java 实现String 的contains方法
- 从拨号音分析拨号号码
- servlet 中bean注入
- thinkphp 杂项(3.2.3)
- Python的with open file as 自我了解解释
- (转)【多媒体封装格式详解】--- AAC ADTS格式分析
- 大白话说期权——除了买涨买跌,我们还能怎么交易?二元期权又是什么鬼?
- JAVA数据结构---二叉树入门
- JAVA数据结构---二叉树入门
- JAVA数据结构---二叉树入门