题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4675

题意:

  给定一个长度为n的序列a,且 1<=a[i]<=m,求分别有多少个序列b,使得GCD(b[1],b[2],...b[n])=x (1<=x<=m),且正好有k个b[i]!=a[i]。

分析:

  莫比乌斯反演,主要是确定F(x)。

  用F(x)表示gcd为x的倍数的方案数,f(x)表示gcd为x的方案数。

  先考虑F(d)怎么计算。可以把a数组中的数分成两类,第一类是必须对应下标不等的,即a[i]不是d的倍数),其他的就是第二类。

  假设第二类的数量是p,第一类的数量就是n−p,因为要选择k个不同的,第一类必须不同,所以需要在第二类中选择k−n+p个,而b数组中每一个数都有[m/p]种选择。

  所以最终的结果就是F(d)=C(p,k-n+p) ∗ ( ([m/d]−1)^(k−n+p) )∗( [m/d]^(n−p) ),然后暴力计算每一个f(d)就好了。总的复杂度是n(logn)。

代码:

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring> using namespace std;
const int maxn=;
const long long mod=1e9+; int n,m,k;
int a[maxn];
int mu[maxn];
int vis[maxn];
int prime[maxn];
int cnt;
int num[maxn];
long long jie[maxn],ni[maxn];
long long F[maxn];
long long res[maxn]; void init()
{
memset(vis,,sizeof(vis));
mu[]=;
cnt=;
for(int i=;i<maxn;i++)
{
if(!vis[i])
{
prime[cnt++]=i;
mu[i]=-;
}
for(int j=;j<cnt&&i*prime[j]<maxn;j++)
{
vis[i*prime[j]]=;
if(i%prime[j])
mu[i*prime[j]]=-mu[i];
else
{
mu[i*prime[j]]=;
break;
}
}
}
} long long power(long long a,long long n,long long m)
{
long long ans=,tmp=a%m;
while(n)
{
if(n&)
ans=ans*tmp%m;
tmp=tmp*tmp%m;
n=n/;
}
return ans;
} long long C(long long n,long long m)
{
if(n==)
return ;
return jie[n]*ni[m]%mod*ni[n-m]%mod;
} int main()
{
init();
ni[]=;
jie[]=;
for(int i=;i<maxn;i++)
{
jie[i]=jie[i-]*i%mod;
ni[i]=power(jie[i],mod-,mod);
}
while(~scanf("%d%d%d",&n,&m,&k))
{
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
memset(num,,sizeof(num));
for(int i=;i<=n;i++)
num[a[i]]++;
for(int i=;i<=m;i++)
{
long long p=;
for(int j=;j*i<=m;j++)
p+=num[i*j];
if(k-n+p<)
F[i]=;
else
F[i]=C(p,k-n+p)*power(m/i-,k-n+p,mod)%mod*power(m/i,n-p,mod)%mod;
}
for(int i=;i<=m;i++)
{
long long ans=;
for(int j=;i*j<=m;j++)
{
ans+=mu[j]*F[i*j];
ans=(ans%mod+mod)%mod;
}
if(i==)
printf("%lld",ans);
else
printf(" %lld",ans);
}
printf("\n");
}
return ;
}

hdu4675 GCD of Sequence的更多相关文章

  1. hdu4675 GCD of Sequence 莫比乌斯+组合数学

    /** 题目:hdu4675 GCD of Sequence 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4675 题意:给定n个数的a数组,以及m,k: ...

  2. ACM学习历程—HDU4675 GCD of Sequence(莫比乌斯)

    Description Alice is playing a game with Bob. Alice shows N integers a 1, a 2, …, a N, and M, K. She ...

  3. HDU-4675 GCD of Sequence 数学

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4675 题意:给一个大小为N的数列a[i],然后一个数M以及一个数K,要你求得一个数列b[i],其中b[ ...

  4. HDU 4675 GCD of Sequence (2013多校7 1010题 数学题)

    GCD of Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)T ...

  5. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)

    先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...

  6. HDU 4675 GCD of Sequence(容斥)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4675 题意:给出n,m,K,一个长度为n的数列A(1<=A[i]<=m).对于d(1< ...

  7. HDU - 4675 GCD of Sequence (莫比乌斯反演+组合数学)

    题意:给出序列[a1..aN],整数M和k,求对1-M中的每个整数d,构建新的序列[b1...bN],使其满足: 1. \(1 \le bi \le M\) 2. \(gcd(b 1, b 2, -, ...

  8. HDU 4675 GCD of Sequence(莫比乌斯反演 + 打表注意事项)题解

    题意: 给出\(M\)和\(a数组\),询问每一个\(d\in[1,M]\),有多少组数组满足:正好修改\(k\)个\(a\)数组里的数使得和原来不同,并且要\(\leq M\),并且\(gcd(a_ ...

  9. hdu 4675 GCD of Sequence

    数学题! 从M到1计算,在计算i的时候,算出原序列是i的倍数的个数cnt: 也就是将cnt个数中的cnt-(n-k)个数变掉,n-cnt个数变为i的倍数. 且i的倍数为t=m/i; 则符合的数为:c[ ...

随机推荐

  1. Spring Boot 使用Redis缓存

    本文示例源码,请看这里 Spring Cache的官方文档,请看这里 缓存存储 Spring 提供了很多缓存管理器,例如: SimpleCacheManager EhCacheCacheManager ...

  2. 【微信小程序开发教程】如何显示群名称?

    今年 5 月份的时候,微信宣布:「为了更好的针对群场景提供个性化服务,当用户在群聊中点击小程序分享卡片时,小程序支持开发者获取群 ID 和群名称」.但随后没多久,发现小程序只返回了群 ID,并没有给我 ...

  3. mybaits错误解决:There is no getter for property named 'parentId ' in class 'java.lang.String'

    在使用mybaitis传参数的时候,如果仅传入一个类型为String的参数,那么在 xml文件中应该使用_parameter来代替参数名. 比如mapper中如下方法,只有一个String值 publ ...

  4. oracle数据库中的四种循环

    [sql]  DECLARE  x number;  BEGIN  x:=9;  <<repeat_loop>>  --循环点  x:=x-1;  DBMS_OUTPUT.PU ...

  5. Python爬虫从入门到放弃(二十一)之 Scrapy分布式部署

    按照上一篇文章中我们将代码放到远程主机是通过拷贝或者git的方式,但是如果考虑到我们又多台远程主机的情况,这种方式就比较麻烦,那有没有好用的方法呢?这里其实可以通过scrapyd,下面是这个scrap ...

  6. js判断空值

    { "mDataProp": 'CreationTime', 'mRender': function (date) { if (!date && typeof (d ...

  7. 笨办法用js屏蔽被http劫持的浮动广告

    最近发现网站经常在右下角弹出一个浮动广告,开始的时候以为只是浏览器的广告. 后来越来越多同事反映在家里不同浏览器也会出现广告.然后深入检查了下,发现网站竟然被劫持了. 然后百度了一大堆资料,什么htt ...

  8. 移动Web学习笔记(第1天)-bootstrap框架的使用

    移动web前言 移动web : 移动端手机浏览器或者微信里面浏览的网页 移动APP : 手机上需要下载安装的应用程序 1. 移动web介绍 1.1 3 天 响应式开发 一套代码运行多个终端 优点:开发 ...

  9. 百度之星2017初赛A轮 1001 小C的倍数问题

    小C的倍数问题 Accepts: 1990 Submissions: 4931 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...

  10. vbs系统监控

    vbs CPU 内存 硬盘监控脚本 On Error Resume Next Dim dwTotalMem, dwAvailMem, totalvolumn, freespace Const szRo ...