BZOJ 2818 Gcd(gcd(x,y)为素数/欧拉函数/莫比乌斯反演)
来源:互联网 发布:数控车梯形螺纹g92编程 编辑:程序博客网 时间:2024/05/01 03:36
题目链接:
BZOJ 2818 Gcd
题意:
分析:
对于一个素数
#include <stdio.h>#include <cstring>#include <algorithm>#include <bitset>#include <cmath>using namespace std;typedef long long ll;const int MAX_N = 10000010;int prime_cnt, prime[MAX_N];bitset<MAX_N> bs;ll phi[MAX_N], sum[MAX_N];void GetPhi(){ bs.set(); prime_cnt = 0; for(int i = 2; i < MAX_N; i++) { if(bs[i]) { prime[prime_cnt++] = i; phi[i] = i - 1; } for(int j = 0; j < prime_cnt && i * prime[j] < MAX_N; j++) { bs[i * prime[j]] = 0; if(i % prime[j] == 0) { phi[i * prime[j]] = prime[j] * phi[i]; break; }else { phi[i * prime[j]] = (prime[j] - 1) * phi[i]; } } } for(int i = 1; i < MAX_N; i++){ sum[i] = sum[i - 1] + 2 * phi[i]; }}ll solve(int n){ ll ans = 0; for(int i = 0; i < prime_cnt && prime[i] <= n; i++){ ans += sum[n / prime[i]] + 1; } return ans;}int main(){ GetPhi(); int n; while(~scanf("%d", &n)){ printf("%lld\n", solve(n)); } return 0;}
也可以是使用莫比乌斯反演。参考博客:http://blog.csdn.net/acdreamers/article/details/8542292
#include <stdio.h>#include <cstring>#include <algorithm>#include <string>#include <cmath>#include <bitset>#include <iostream>using namespace std;typedef long long ll;const int MAX_N = 10000010;bitset<MAX_N> bs;int prime_cnt, prime[MAX_N / 100 * 7];int mu[MAX_N], g[MAX_N];ll sum[MAX_N];void init(){ bs.set(); prime_cnt = 0; mu[1] = 1; for(int i = 2; i < MAX_N; ++i) { if(bs[i]) { prime[prime_cnt++] = i; mu[i] = -1; g[i] = 1; } for(int j = 0; j < prime_cnt && i * prime[j] < MAX_N; ++j ){ bs[i * prime[j]] = 0; if(i % prime[j]){ mu[i * prime[j]] = -mu[i]; g[i * prime[j]] = mu[i] - g[i]; }else { mu[i * prime[j]] = 0; g[i * prime[j]] = mu[i]; break; } } } sum[0] = 0; for(int i = 1; i < MAX_N; ++i) { sum[i] = sum[i - 1] + g[i]; }}ll solve(int n, int m){ int top = min(n, m), last; ll ans = 0; for(int i = 1; i <= top; i = last + 1) { last = min(n / (n / i), m / (m / i)); ans += (ll)n / i * (m / i) * (sum[last] - sum[i - 1]); } return ans;}int main(){ init(); int n; while(~scanf("%d", &n)){ printf("%lld\n", solve(n, n)); } return 0;}
0 0
- BZOJ 2818 Gcd(gcd(x,y)为素数/欧拉函数/莫比乌斯反演)
- BZOJ 2818 Gcd (莫比乌斯反演 或 欧拉函数)
- BZOJ 2818 gcd(莫比乌斯反演)
- BZOJ 2818 Gcd (欧拉筛 \ 莫比乌斯反演)
- bzoj 2818 Gcd(莫比乌斯反演)
- BZOJ 2818-Gcd(莫比乌斯反演)
- HDOJ 1695 GCD(容斥+欧拉函数&&莫比乌斯反演+分块)
- BZOJ-2818-Gcd(欧拉函数/Mobius反演)
- bzoj 2818 Gcd 莫比乌斯反演
- BZOJ 2818: Gcd (莫比乌斯反演)
- Bzoj 2818: Gcd(莫比乌斯反演)
- [BZOJ 2818]Gcd:莫比乌斯反演
- hdu 1695 GCD 欧拉函数+容斥 ||莫比乌斯反演
- FZU 1969 && UVA 11426 GCD Extreme (欧拉函数 或 莫比乌斯反演)
- SPOJ - VLATTICE Visible Lattice Points(gcd(x,y,z)=1的对数/莫比乌斯反演)
- 洛谷 P2568 GCD(欧拉定理 | | 莫比乌斯反演)
- BZOJ 2818 Gcd + spoj 4491(莫比乌斯反演 分块)
- BZOJ 2820 YY的GCD 莫比乌斯反演
- Guava base -- Splitter
- Android开发笔记之广播,service实现音乐的播放暂停停止快进等功能
- html 常用元素
- promise对象学习
- c语言==字符数组与字符串,char的取值范围(1)
- BZOJ 2818 Gcd(gcd(x,y)为素数/欧拉函数/莫比乌斯反演)
- LaTeX:公式及编号
- NSRunLoop浅谈
- mac和phy的关系(二)
- HDU-2007
- AutoCompleteTextView控件
- 梯田AGAIN
- LaTex:算法排版
- 枚举-拨钟问题(算法基础 第2周)