F. Coprime Subsequences
2017-05-14 17:18
447 查看
题目链接:
F.CoprimeSubsequences
timelimitpertest
2seconds
memorylimitpertest
256megabytes
input
standardinput
output
standardoutput
Let'scallanon-emptysequenceofpositiveintegersa1, a2...akcoprimeifthegreatestcommondivisorofallelementsofthissequenceisequalto1.
Givenanarrayaconsistingofnpositiveintegers,findthenumberofitscoprimesubsequences.Sincetheanswermaybeverylarge,printitmodulo109 + 7.
Notethattwosubsequencesareconsidereddifferentifchosenindicesaredifferent.Forexample,inthearray[1, 1]thereare3differentsubsequences:[1],[1]and[1, 1].
Input
Thefirstlinecontainsoneintegernumbern(1 ≤ n ≤ 100000).
Thesecondlinecontainsnintegernumbersa1, a2...an(1 ≤ ai ≤ 100000).
Output
Printthenumberofcoprimesubsequencesofamodulo109 + 7.
Examples
input
output
input
output
input
output
#include<bits/stdc++.h>
usingnamespacestd;
typedeflonglongLL;
constintmaxn=1e5+10;
constintmod=1e9+7;
intn,a[maxn],p[maxn];
intvis[maxn],num[maxn];
voidinit()
{
p[0]=1;
for(inti=1;i<maxn;i++){p[i]=p[i-1]*2;if(p[i]>=mod)p[i]-=mod;}
for(inti=2;i<maxn;i++)
{
if(!vis[i])
{
num[i]++;
for(intj=2*i;j<maxn;j+=i)
{
vis[j]=1;
if(num[j]==-1)continue;
inttep=j,x=0;
while(tep%i==0)x++,tep/=i;
if(x>1)num[j]=-1;
elsenum[j]++;
}
}
}
}
intmain()
{
init();
scanf("%d",&n);
intx;
for(inti=1;i<=n;i++)
{
scanf("%d",&x);
for(intj=1;j*j<=x;j++)
{
if(x%j)continue;
a[j]++;
if(j*j!=x)a[x/j]++;
}
}
intans=0;
for(inti=1;i<maxn;i++)
{
if(num[i]==-1)continue;
if(num[i]&1)ans=(ans-p[a[i]]+1);
elseans=(ans+p[a[i]]-1);
if(ans>=mod)ans-=mod;
elseif(ans<0)ans+=mod;
}
printf("%d\n",ans);
return0;
}
timelimitpertest
2seconds
memorylimitpertest
256megabytes
input
standardinput
output
standardoutput
Let'scallanon-emptysequenceofpositiveintegersa1, a2...akcoprimeifthegreatestcommondivisorofallelementsofthissequenceisequalto1.
Givenanarrayaconsistingofnpositiveintegers,findthenumberofitscoprimesubsequences.Sincetheanswermaybeverylarge,printitmodulo109 + 7.
Notethattwosubsequencesareconsidereddifferentifchosenindicesaredifferent.Forexample,inthearray[1, 1]thereare3differentsubsequences:[1],[1]and[1, 1].
Input
Thefirstlinecontainsoneintegernumbern(1 ≤ n ≤ 100000).
Thesecondlinecontainsnintegernumbersa1, a2...an(1 ≤ ai ≤ 100000).
Output
Printthenumberofcoprimesubsequencesofamodulo109 + 7.
Examples
input
3 123
output
5
input
4 1111
output
15
input
7 13515310535
output
100 题意:给一个序列,问gcd为1的子序列有多少个; 思路:容斥,可以求出gcd为1的倍数的子序列个数,然后减去gcd为2,3,5,等等一个素数倍数的子序列个数再加上两个素数积倍数的子序列个数以此类推, (注意容斥里面集合的交集里面不可能有4,9,12这种数,因为质因数分解后里面同一个质因数的个数>1,这就不可能在两个集合的交集里面); AC代码:
相关文章推荐
- CF 803 F. Coprime Subsequences(数论题,莫比乌斯,容斥原理)
- cf Educational Codeforces Round 20 F. Coprime Subsequences
- 【codeforces 803F】Coprime Subsequences
- CF 803 F Coprime Subsequences (容斥原理)
- Educational Codeforces Round 20 F. Coprime Subsequences(容斥)
- [cf803F] Coprime Subsequences(组合数学,容斥)
- Educational Codeforces Round 20 F. Coprime Subsequences(莫比乌斯反演)
- CodeForces 803 F.Coprime Subsequences(莫比乌斯反演+组合数学)
- Codeforces-803F-Coprime Subsequences(筛)
- [CodeForces803F]Coprime Subsequences
- HDU - 4135 Co-prime
- hdu 4135 Co-prime 容斥原理
- HDU 4135 Co-prime (容斥原理/分解质因数)
- hdu3388 Coprime 二分+容斥原理
- Hackerrank Coprime Power Sum
- hdu 4135 Co-prime(容斥原理)
- HDU 6025 Coprime Sequence
- hdu4135(容斥原理)Co-prime
- HDU - 6025 Coprime Sequence(前缀,后缀,gcd)
- HDU - 6025 Coprime Sequence