BZOJ 2818: 欧拉筛法求gcd(x,y)==k(k为质数)
来源:互联网 发布:好用的鼠标 知乎 编辑:程序博客网 时间:2024/04/28 15:24
Description
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.
Input
一个整数N
Output
如题
Sample Input
4
Sample Output
4
Hint
hint
对于样例(2,2),(2,4),(3,3),(4,2)
1<=N<=10^7
GCD(px,py)==p;
有GCD(x,y)==1,在1-n/p的情况数。即1-n/p的欧拉和。p为质数。
所以直接模板套上筛。。就可以了。。
注意(2,4)(4,2)是两种情况要*2.。但是(2,2)这种有不是,又要剪掉。。
#include<bits/stdc++.h>using namespace std;#define LL long longconst int mod=1000000007;const int maxn=10000005;bool check[maxn]; //用于打表记录的中间量LL sumPhi[maxn]; //前i个的欧拉函数和int cnt,phi[maxn],prime[maxn]; //素数个数,欧拉表,素数表//素数表是第几个素数是什么,欧拉表是i的欧拉是phi[i];void init(int n){ //素数+欧拉表 phi[1]=1; cnt=0; for(int i=2;i<=n;i++){ if(!check[i]){ phi[i]=i-1; prime[cnt++]=i; } for(int j=0;j<cnt;j++){ if(i*prime[j]>n)break; check[i*prime[j]]=true; if(i%prime[j]==0){ phi[i*prime[j]]=phi[i]*prime[j]; break; } else{ phi[i*prime[j]]=phi[i]*(prime[j]-1); } } } sumPhi[0]=0; for(int i=1;i<=n;i++) sumPhi[i]=(sumPhi[i-1]+phi[i]);}int main(){ int n; while(cin>>n){ LL ans=0; init(n); for(int i=0;i<cnt;i++){ ans+=sumPhi[n/prime[i]]; } cout<<2*ans-cnt<<endl; } return 0;}
0 0
- BZOJ 2818: 欧拉筛法求gcd(x,y)==k(k为质数)
- BZOJ 2301 Problem B(x属于[a,b],y属于[c,d]满足gcd(x,y)=k的(x,y)的有序对数)
- HDU 1695 GCD(gcd(x,y)=k无序对数/容斥原理)
- 笔试面试13--给定 x, k ,求满足 x + y = x | y 的第 k 小的正整数 y
- BZOJ 2818 Gcd(gcd(x,y)为素数/欧拉函数/莫比乌斯反演)
- POJ 3243 Clever Y (求X^Y mod Z = K)
- 算法分析:x+y=x|y,求k小y
- 输入正整数 k,找到所有的正整数 x ≥ y,使得 1/k =1/x + 1/y
- hdu4282 x^z+y^z+x*y*z=k 解的个数
- 给你5个数a,b,c,d,k。x属于[a,b]y属于[c,d]。 问你有多少对(x,y)的公约数为k
- BZOJ 1101([POI2007]Zap-满足x<=a&&y<=b&&gcd(x,y)=d的数对个数)
- bzoj 4152 the camptin (dis[x][y]=min(|x.x-y.x|,|x.y-y.y|),求1,n最短路)
- 为了使平面3*x-k*y-3z+16=0与曲面3*x^2+y^2+z^2=16相切,求k
- 求出所有的1/k=1/x+1/y的情况
- 【杭电2015年12月校赛E】【二进制拆分】Bitwise Equations 第K小的X满足X或Y=X+Y
- 求两个整数的最大公约数,算法原理辗转相除法 原理: GCD (x,y) = GCD(y,x%y)
- 给定 x, k ,求满足 x + y = x | y 的第 k 小的正整数 y 。 | 是二进制的或(or)运算,例如 3 | 5 = 7。比如当 x=5,k=1时返回 2,因为5+1=6 不等于 5
- 输入正整数k,找到所有的正整数x>=y,使得1/k=1/x + 1/y; 样例输入: 2 12 样例输出: 2 1/2 = 1/6 + 1/3 1/
- keepalived实现双机热备
- 线性表之顺序表示(二)
- 库函数和系统调用
- UVA - 719Glass Beads(后缀数组)
- SQL中where和having的区别
- BZOJ 2818: 欧拉筛法求gcd(x,y)==k(k为质数)
- 二叉树的性质
- 第一个JavaScripe 程序
- Activity加载模式及数据传递
- 而同时也是让他以后人生
- 关于LaTeX中的正文的字体大小
- 从中继器,集线器,网桥,交换机到路由器
- C语言中<>和“”的区别
- 高端内存映射之kmap持久内核映射--Linux内存管理(二十)