HDU 5212 Code【莫比乌斯反演】
2016-05-30 23:05
225 查看
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5212题意:
给定序列,1≤i,j≤n,求gcd(a[i],a[j])∗(gcd(a[i],a[j])−1)之和。分析:
同样我们设f(d):满足gcd(x,y)=d且x,y均在给定范围内的(x,y)的对数。
F(d):满足d|gcd(x,y)且x,y均在给定范围内的(x,y)的对数。
反演后我们得到f(x)=∑x|dμ(d/x)∗F(d)
由于序列给定,这里的F(d)我们可以通过枚举d,来找d的倍数的个数,那么F(d)=cnt[d]∗cnt[d],枚举最大公约数求出f(d),那么答案即为f(d)∗d∗(d−1)的和。时间复杂度O(nlogn)。
代码:
/* -- Hdu 5212 -- mobius -- Create by jiangyuzhu -- 2016/5/30 */ #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <cmath> #include <stack> using namespace std; typedef long long ll; #define sa(n) scanf("%d", &(n)) #define sal(n) scanf("%I64d", &(n)) #define pl(x) cout << #x << " " << x << endl #define mdzz cout<<"mdzz"<<endl; const int maxn = 1e4+ 5 , mod = 1e4 + 7; int tot = 0; int miu[maxn], prime[maxn], a[maxn]; int cnt[maxn], F[maxn]; bool flag[maxn]; void mobius() { miu[1] = 1; tot = 0; for(int i = 2; i < maxn; i++){ if(!flag[i]){ prime[tot++] = i; miu[i] = -1; cnt[i] = 1; } for(int j = 0; j < tot && i * prime[j] < maxn; j++){ flag[i * prime[j]] = true; cnt[i * prime[j]] = cnt[i] + 1; if(i % prime[j]){ miu[i * prime[j]] = -miu[i]; } else{ miu[i * prime[j]] = 0; break; } } } } int main (void) { mobius(); int n; while(~sa(n)){ int maxa = 0; memset(cnt, 0, sizeof(cnt)); memset(F, 0, sizeof(F)); for(int i = 0; i < n; i++) { sa(a[i]); cnt[a[i]]++; maxa = max(maxa, a[i]); } for(int i = 1; i <= maxa; i++){ for(int j = i; j <= maxa; j += i){ F[i] += cnt[j]; } } ll ans = 0; ll tmp = 0; for(int i = 1; i <= maxa; i++){ tmp = 0; for(int j = i; j <= maxa; j += i){ tmp += miu[j/ i] * F[j] * 1ll * F[j] % mod; } ans =( ans + tmp * 1ll * i % mod * (i - 1)% mod) % mod; } printf("%I64d\n", ans); } return 0; }
相关文章推荐
- 柔弱的APP如何自我保护,浅谈APP防御手段,使用360加固助手加固/签名/多渠道打包/应用市场发布
- 柔弱的APP如何自我保护,浅谈APP防御手段,使用360加固助手加固/签名/多渠道打包/应用市场发布
- C#基础之内存分配
- 周总结
- Mac OS 简易安装redis
- 梯形
- 算法系列(四)排序算法中篇--归并排序和快速排序
- Python学习系列之内置函数
- AngularJs(七) 模块的创建
- 常用正则表达式——持续更新
- js得到url参数
- 2016SDAU课程练习三1024
- linux高性能服务器编程之epoll
- js的引用类型和类型转换以及js的语句
- [iOS]多线程和GCD
- 总结
- UINavigationController和UITabBarController合用
- Python连接SQL Server入门
- 导入JFrame时eclipse编译报错
- (转载)请不要做浮躁的人