原题链接: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

Codeforces 803F - Coprime Subsequences(数论)的更多相关文章

  1. Codeforces 803F Coprime Subsequences (容斥)

    Link:http://codeforces.com/contest/803/problem/F 题意:给n个数字,求有多少个GCD为1的子序列. 题解:容斥!比赛时能写出来真是炒鸡开森啊! num[ ...

  2. CodeForces 803F Coprime Subsequences

    $dp$. 记$dp[i]$表示$gcd$为$i$的倍数的子序列的方案数.然后倒着推一遍减去倍数的方案数就可以得到想要的答案了. #include <iostream> #include ...

  3. CodeForces - 803F: Coprime Subsequences(莫比乌斯&容斥)

    Let's call a non-empty sequence of positive integers a1, a2... ak coprime if the greatest common div ...

  4. F. Coprime Subsequences

    题目链接: F. Coprime Subsequences time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  5. [CodeForces - 1225C]p-binary 【数论】【二进制】

    [CodeForces - 1225C]p-binary [数论][二进制] 标签: 题解 codeforces题解 数论 题目描述 Time limit 2000 ms Memory limit 5 ...

  6. 【codeforces 803F】Coprime Subsequences

    [题目链接]:http://codeforces.com/contest/803/problem/F [题意] 给你一个序列; 问你这个序列里面有多少个子列; 且这个子列里面的所有数字互质; [题解] ...

  7. Codeforces 660A. Co-prime Array 最大公约数

    A. Co-prime Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  8. codeforces 597C C. Subsequences(dp+树状数组)

    题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...

  9. NYOJ 1066 CO-PRIME(数论)

    CO-PRIME 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 This problem is so easy! Can you solve it? You are ...

随机推荐

  1. 【ABAP系列】SAP ABAP常用函数总结第一篇

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP常用函数总结第一 ...

  2. 【Unity 系统知识】 Time类

    [转载请注明出处] //表示时间总量Time.time:(只读)表示从程序运行的总时间,会随着游戏的暂停而停止计算.Time.unscaledTime:(只读)不考虑timescale对时间修改的总时 ...

  3. Bootstrap 学习笔记10 弹出框和警告框插件

    隐藏还有2个: 警告框:

  4. android button click事件

    package a.a; import android.app.Activity;import android.os.Bundle;import android.view.View;import an ...

  5. Linux-第一篇linux基本认识

    1.在Linux世界中,一切皆是文件,Linux文件采用级层式的树状目录结构,在此结构中根目录是“/”. 一般linux系统的目录结构如下 目录结构说明 目录 说明 bin 存放二进制可执行文件(ls ...

  6. 红玫瑰&爱情转移

  7. CSS中的关系选择器

    关系选择器是指根据与其他元素的关系选择元素的选择器,常见的符号有空格.>.~,还 有+等,这些都是非常常用的选择器. 后代选择器:选择所有合乎规则的后代元素.空格连接. 相邻后代选择器:仅仅选择 ...

  8. 转载他人的efk搭建文章后边有链接和地址

    EFK教程 - EFK快速入门指南   通过部署elasticsearch(三节点)+filebeat+kibana快速入门EFK,并搭建起可用的demo环境测试效果 目录 ▪ 用途▪ 实验架构▪ E ...

  9. 吉首大学2019年程序设计竞赛(重现赛) B 干物妹小埋

    链接:https://ac.nowcoder.com/acm/contest/992/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...

  10. ltp-ddt realtime_cpu_load涉及的cyclictest 交叉编译

    Cyclictest 是 rt-tests 下的一个测试工具,也是rt-tests 下使用最广泛的测试工具,一般主要用来测试使用内核的延迟,从而判断内核的实时性.   1.下载源码 git clone ...