欧拉筛(bzoj 2818: Gcd)
来源:互联网 发布:mac蓝屏之后开不了机了 编辑:程序博客网 时间:2024/06/06 23:11
2818: Gcd
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 6707 Solved: 2952
[Submit][Status][Discuss]
Description
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.
Input
一个整数N
Output
如题
Sample Input
4
Sample Output
4
和bzoj 2820一样,可以利用莫比乌斯函数求解
但是常数太大这题过不去
其实也不用那么麻烦
算出每个质数对答案的贡献
假设Gcd(i, j)==p,那么i/p和j/p一定互质,并且这两者是充要条件
所以只要求出与i/p的互质对数即可,这不就是φ(i/p)么
欧拉筛处理出所有的φ()之后再线性统计一遍答案就出来了
ans = ∑sum(n/p)*2-1 (p∈质数,sum = ∑φ() )
#include<stdio.h>using namespace std;#define LL long longint n, p, cnt, phi[10000005] = {0,1}, pri[1000005], flag[10000005];LL sum[10000005], ans;int main(void){int n;LL i, j;for(i=2;i<=10000000;i++){if(flag[i]==0){phi[i] = i-1;pri[++cnt] = i;}for(j=1;j<=cnt&&i*pri[j]<=10000000;j++){flag[i*pri[j]] = 1;if(i%pri[j]==0){phi[i*pri[j]] = phi[i]*pri[j];break;}elsephi[i*pri[j]] = phi[i]*phi[pri[j]];}}for(i=1;i<=10000000;i++)sum[i] = sum[i-1]+phi[i];scanf("%d", &n);for(i=1;i<=cnt;i++){if(n/pri[i]!=0)ans += sum[n/pri[i]]*2-1;}printf("%lld\n", ans);return 0;}
阅读全文
1 0
- 欧拉筛(bzoj 2818: Gcd)
- BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes筛)
- BZOJ 2818 Gcd (欧拉筛 \ 莫比乌斯反演)
- BZOJ 2818 Gcd (数论 欧拉)
- bzoj 2818 GCD(欧拉函数)
- BZOJ 2818 gcd
- BZOJ 2818 Gcd
- 【BZOJ 2818】 gcd
- bzoj 2818: Gcd
- BZOJ 2818: Gcd
- BZOJ 2818: Gcd
- 【BZOJ 2818】Gcd
- bzoj 2818: Gcd
- Gcd [Bzoj 2818]
- 【BZOJ 2818】Gcd
- 【BZOJ】2818 Gcd
- BZOJ 2818 Gcd
- bzoj 2818: Gcd
- word/excel 里的表格如何到PS里使用
- MDCC2016大会http://mdcc.csdn.net/计算机视觉中的难题
- java爬虫爬取360安全卫士对手机号的标识
- 变量类型转换
- 人工智能加剧互金马太效应,爱钱进凭什么领先?
- 欧拉筛(bzoj 2818: Gcd)
- 初用Git之小结(一)
- 代价地图的层级结构
- python:2017.11.3
- list json序列化
- Container With Most Water
- TOP100summit:【分享实录-猫眼电影】业务纵横捭阖背后的技术拆分与融合
- CVPR2017-最新目标检测相关
- 基础知识总结:枚举