hdu 4675 GCD of Sequence
数学题!
从M到1计算,在计算i的时候,算出原序列是i的倍数的个数cnt;
也就是将cnt个数中的cnt-(n-k)个数变掉,n-cnt个数变为i的倍数。
且i的倍数为t=m/i;
则符合的数为:c[cnt][n-k]*t^(n-cnt)*(t-1)*(cnt-(n-k)).
这样得到的是所有i的倍数,还要减去2*i,3*i……
代码如下:
#include<stdio.h>
#include<cstring>
#define M 1000000007
#define MM 300001
#define ll __int64
#define I(x) scanf("%d",&x)
int a[MM],num[MM];
ll c[MM],an[MM],sum;
ll pows(ll a,ll b)
{
ll ans=;
while(b){
if(b&) ans=(ans*a)%M;
b>>=;
a=(a*a)%M;
}
return ans;
}
ll inv(ll a,ll m)
{
if(a == )return ;
return inv(m%a,m)*(m-m/a)%m;
}
int main()
{
int n,m,k,i,j,cnt,t;
while(scanf("%d%d%d",&n,&m,&k)!=EOF){
memset(num,,sizeof(num));
for(i=;i<n;i++){
I(a[i]);
num[a[i]]++;
}
c[n-k]=;
for(i=n-k+;i<=n;i++) c[i]=c[i-]*i%M*inv(i-(n-k),M)%M;
for(i=m;i>=;i--){
cnt=;sum=;
for(j=;i*j<=m;j++){
cnt+=num[i*j];
if(j>) sum=(sum+an[i*j])%M;
}
t=m/i;
if(t==){
if(cnt==n-k) an[i]=;
else an[i]=;
continue;
}
if(cnt<n-k){
an[i]=;
continue;
}
an[i]=c[cnt]*pows(t,n-cnt)%M*pows(t-,cnt-(n-k))%M;
an[i]=((an[i]-sum)%M+M)%M;
}
for(i=;i<=m;i++){
printf("%I64d",an[i]);
if(i<=m-) printf(" ");
else printf("\n");
}
}
return ;
}
hdu 4675 GCD of Sequence的更多相关文章
- 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 ...
- 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)
先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...
- 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< ...
- 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, -, ...
- HDU 4675 GCD of Sequence(莫比乌斯反演 + 打表注意事项)题解
题意: 给出\(M\)和\(a数组\),询问每一个\(d\in[1,M]\),有多少组数组满足:正好修改\(k\)个\(a\)数组里的数使得和原来不同,并且要\(\leq M\),并且\(gcd(a_ ...
- hdu4675 GCD of Sequence 莫比乌斯+组合数学
/** 题目:hdu4675 GCD of Sequence 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4675 题意:给定n个数的a数组,以及m,k: ...
- HDU 5726 GCD 区间GCD=k的个数
GCD Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- HDU 5783 Divide the Sequence(数列划分)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- 判断相同区间(lazy) 多校8 HDU 5828 Rikka with Sequence
// 判断相同区间(lazy) 多校8 HDU 5828 Rikka with Sequence // 题意:三种操作,1增加值,2开根,3求和 // 思路:这题与HDU 4027 和HDU 5634 ...
随机推荐
- 第六十二篇、AFN3.0封装网络请求框架,支持缓存
1.网络请求 第一种实现方式: 功能:GET POST 请求 缓存逻辑: 1.是否要刷新本地缓存,不需要就直接发起无缓存的网络请求,否则直接读取本地数据 2.需要刷新本地缓存,先读取本地数据,有就返回 ...
- 引用类型之Array类型
Array类型 ECMAScript数组与其它语言数组一样,都是数据的有序列表.但是ECMAScript数组的每一项可以保存任何类型的数据.而且,ECMAScript数组是可以动态调整的. 1.创建和 ...
- 永远的月亮 2007? (献给L之二)
文/安然 您是我心中永远的月亮 已经走远在曾年少的梦想 但是,蒙胧而明亮的月光永远珍藏 夜夜升起般不忘…… 多年后的路上依旧会有迷茫 梦中,又一次回到您的课堂 感受您暴躁的激情和无言深情的期望 当又一 ...
- 一些值得思考的"小题"一
如下是我们查找数组中某个元素的一种通常做法 const int *Find(const int *array, int length, int x) { const int *p = array; ; ...
- Apache 编译安装
# wget http://www.apache.org/dist/httpd/httpd-2.2.9.tar.gz (此处我是直接用的下载好的包) # tar -zxvf httpd-2.2.9. ...
- HTTP Error 500.21解决方案
Windows 7 IIS (HTTP Error 500.21 - Internal Server Error)解决方案 今天在测试网站的时候,在浏览器中输入http://localhost/时 ...
- HTML5 内联框架iFrame
由于现在frame和frameset很少使用,已经过时了,已经被div+CSS代替了,所以,这里只是举例说明一下,当下还在使用的内联框架iFrame 所谓的iFrame内联框架,我的理解就是在网页内部 ...
- jquery 点击查看,收起特效
<div class="all"> <p><a href="javascript:;" id="onvk"&g ...
- SQL Server 2008 R2密钥序列号
SQL Server 2008 R2密钥序列号 序列号: 开发版(Developer): PTTFM-X467G-P7RH2-3Q6CG-4DMYB 企业版(Enterprise): JD8Y6-HQ ...
- Android UI学习1:控件和基本事件的响应
在任何一个 GUI 系统中,控制界面上的控件(通常称为控件)都是一个基本的内容.对于 Android 应用程序,控件称为 View. 在 Android 中,在处理 UI 中的各种元素的时候,两个程序 ...