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 ...
随机推荐
- 清理IOS项目未使用图片脚本
项目经过需求的变更,产品迭代,会经过多次的改版,有些以前不再使用的图片不一定能够及时的清理掉,这些无用的图片一方面让项目图片资源的结构更加的复杂,另一方面会导致ipa包的体积变大. 因此我们需要清理不 ...
- C#核心语法
目录 1. 特殊的数据成员........................................................................... 1 2. 数组(arr ...
- WiFi安全之WPA介绍
WPA,全称为Wi-Fi Protected Access,是一种保护WiFi安全的系统,实现了IEEE 802.11i的大部分标准,是一种替代WEP的过渡方案. 这个协议包含了前向兼容RC4的加密协 ...
- C++对象的JSON序列化与反序列化探索续-复杂对象的序列化与反序列化
本文是基本上一篇博文进行改进而成,上一篇请见: C++对象的JSON序列化与反序列化探索 此处就不多说了,直接上代码. 1. 序列化基类 #pragma once #include <strin ...
- mysql主从集群定时备份脚本
#!/bin/bash dpath="/mysql_backup" mydays="7" username="root" mysql_p ...
- 《SELinux安全上下文的管理(含图)》RedHat6.3——步骤详细、条理清晰
1.为什么浏览器只识别/var/www/html下的文件? 2.为什么不识别别的目录下的index.html文件呢? 3.这里牵扯到身份证,先安装软件包. 4.打开selinux 5.建立一个新的目录 ...
- 看几道JQuery试题后总结(上篇)
无意中拿到的JQuery题目,拿来分享顺便总结总结 在JQuery对象中区分.text();.val();.html();.innerHTML;.innerTEXT()的用法与区别,用例子证明 在JQ ...
- 谈谈C语言的数据类型
本文摘要: 本文主要讲述C语言中的数据类型,从基本的数据类型到派生的数据类型,从int ,char ,float double ....到指针,数组,函数,指向指针的指针,指向数组的指针,指向函数的指 ...
- php微信支付(仅Jsapi支付)详细步骤.----仅适合第一次做微信开发的程序员
本人最近做了微信支付开发,是第一次接触.其中走了很多弯路,遇到的问题也很多.为了让和我一样的新人不再遇到类似的问题,我把我的开发步骤和问题写出来,以供参考. 开发时间是2016/8/2,所以微信支付的 ...
- php获取数组中重复数据的两种方法
分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...