原题链接:http://codeforces.com/contest/803/problem/F

题意:若gcd(a1, a2, a3,...,an)=1则认为这n个数是互质的。求集合a中,元素互质的集合的个数。

思路:首先知道一个大小为n的集合有2n-1个非空子集,运用容斥,对某个数,我们可以求出它作为因子出现的个数(假设为ki)。推一下式子,可以得到结果就等于:Σmiu[i]*(2i-1),其中miu[i]是莫比乌斯函数。

时间复杂度为:O(n*sqrt(max_a)),看起来似乎会超时,实际上用了不到300ms过了。

AC代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
typedef long long LL;
const LL MOD=1e9+;
const int MAXN=1e5+;
int num[MAXN];
map<int, int> mp;
int miu[MAXN],primes[MAXN],tot=;
bool isPrime[MAXN];
void getMiu()
{
memset(isPrime,true,sizeof(isPrime));
miu[]=;
for(int i=;i<MAXN;i++)
{
if(isPrime[i])
{
miu[i]=-;
primes[++tot]=i;
}
for(int j=;j<=tot;j++)
{
if(i*primes[j]>=MAXN) break;
isPrime[i*primes[j]]=false;
if(i%primes[j]==)
{
miu[i*primes[j]]=;
break;
}
miu[i*primes[j]]=-miu[i];
}
}
}
LL POW[MAXN];
void getpow()
{
POW[]=;
for(int i=;i<MAXN;i++)
POW[i]=POW[i-]*%MOD;
return;
}
int main()
{
int n,a,maxx;
getMiu();
getpow();
scanf("%d", &n);
maxx=;
for(int i=;i<n;i++){
scanf("%d", &a);//cout<<'*'<<endl;
maxx=max(a, maxx);
for(int j=;j*j<=a;j++){
if(a%j==){
mp[j]++;
if(j*j!=a)
mp[a/j]++;
}
}
} LL res=;
for(int i=;i<=maxx;i++){
if(mp[i]!=){
res=(res+miu[i]*(POW[mp[i]]-))%MOD;
}
}
res=(res%MOD+MOD)%MOD;
cout<<res<<endl;
}

做过多校题HDU6053发现思路差不多,于是一发就AC了特别开心 :D

最新文章

  1. C#开发微信门户及应用(22)-微信小店的开发和使用
  2. 再探JS数组原生方法—没想到你是这样的数组
  3. 用原生javascript实现在页面动态显示时间
  4. C语言运算符优先级 详细列表
  5. 解决svn working copy locked问题
  6. LabVIEW串口通信
  7. python常用sql语句
  8. ios 7.1.2 拍照声音
  9. CodeForces 454C Little Pony and Expected Maximum
  10. JSONP与JSON的关系
  11. Servlet编码和解码
  12. rotatelogs分割apache日志文件
  13. Linux(Centos)中tcpdump参数用法详解(转)
  14. Python并发编程协程(Coroutine)之Gevent
  15. 201521123048 《Java程序设计》第2周学习总结
  16. height:auto 火狐没边框
  17. [Android] Android 支持下拉刷新、上拉加载更多 的 XRecyclerview
  18. 学习Makefile
  19. visual studio 2017 创建 android 本地共享库(.so) 并从 C# android 项目中调用
  20. oracle查询查询出某字段为空后前台不显示的小测试1

热门文章

  1. [LeetCode] 72. Edit Distance(最短编辑距离)
  2. JavaScript搜索框响应事件
  3. C# 栈=&gt;随时读取栈中最小值
  4. CentOS7通过SpeedTest工具测速
  5. 中标麒麟V6.0安装 mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
  6. seaborn教程3——数据集的分布可视化
  7. P3773 [CTSC2017]吉夫特
  8. 【接口工具】接口抓包工具之Charles
  9. MapReduce数据格式化------&lt;一&gt;
  10. 【问题解决方案】git中的文件的重命名