题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=71738

题意:给你一个整数序列a1, a2, a3, ... , an。求gcd(ai, aj) = 1 且 i < j的对数。

思路:利用莫比乌斯反演很快就能得到公式,但是求解时我们要知道序列中1, 2, 3, ... , max(a1, a2, ... , an)的倍数各是多少。我们用num[i]=k,来表示序列中有k个数是i的倍数,那么这部分对结果的影响是mu[i]*(k - 1) * k / 2。最后的结果就是sigma(mu[i]*(k - 1) * k / 2)。

code:

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int MAXN = ;
int num[MAXN]; // num[i]表示 满足(i|ak)的个数
int tmp[MAXN]; // 标记哪些数有
bool check[MAXN];
int primes[MAXN];
int mu[MAXN]; void moblus()
{
memset(check, false, sizeof(check));
mu[] = ;
int cnt = ;
for (int i = ; i < MAXN; ++i) {
if (!check[i]) {
primes[cnt++] = i;
mu[i] = -;
}
for (int j = ; j < cnt; ++j) {
if (i * primes[j] > MAXN) break;
check[i * primes[j]] = true;
if (i % primes[j] == ) {
mu[i * primes[j]] = ;
break;
} else {
mu[i * primes[j]] = -mu[i];
}
}
}
} int main()
{
moblus();
int n;
while (scanf("%d", &n) != EOF) {
memset(num, , sizeof(num));
memset(tmp, , sizeof(tmp));
int tmax = ;
for (int i = ; i < n; ++i) {
int x;
scanf("%d", &x);
++tmp[x];
tmax = max(tmax, x);
}
for (int i = ; i <= tmax; ++i) {
for (int j = i; j <= tmax; j += i) {
num[i] += tmp[j];
}
}
LL ans = ;
for (int i = ; i <= tmax; ++i) {
ans += (LL)mu[i] * num[i] * (num[i] - ) / ;
}
printf("%lld\n", ans);
}
return ;
}

最新文章

  1. 【原】mysql5.6 split函数_字符串的分割
  2. Fail2ban 防止暴力破解centos服务器的SSH或者FTP账户
  3. 自定义 Azure Table storage 查询过滤条件
  4. Leetcode Integer Replacement
  5. 找到一个Flex中LineChart很好的学习博客
  6. 判断java中两个对象是否相等
  7. 161012、JAVA读写文件,如何避免中文乱码
  8. MVC4.0 实现单一Action返回多种结果
  9. java substring和substr
  10. 使用Xcode Instruments Leak解决内存泄漏问题
  11. homebrew介绍
  12. Java排序算法(四):Shell排序
  13. 关于Java空指针的控制(转)
  14. 光场相机重聚焦之三——Matlab光场工具包使用、重聚焦及多视角效果展示
  15. C#Winform使用mysql作为本地数据库
  16. javascript实现图片延迟加载方法汇总(三种方法)
  17. C#版 - 226. Invert Binary Tree(剑指offer 面试题19) - 题解
  18. 第十二届湖南省赛 A - 2016 ( 数学,同余转换)
  19. Deep Learning.ai学习笔记_第二门课_改善深层神经网络:超参数调试、正则化以及优化
  20. mac shell 获取ip,自动启动文件http服务

热门文章

  1. 2016 Multi-University Training Contest 8 总结
  2. iOS6和iOS7代码的适配(4)——tableView
  3. Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性
  4. 由RGB到HSV颜色空间的理解
  5. realloc,c语言
  6. XLSReadWrite控件简介
  7. Mysql 如何做双机热备和负载均衡 (方法一)
  8. Windows系统下远程Linux系统
  9. 输入输出函数库stdio.h
  10. Android Memory/Resource Leak总结