bzoj 4305 数列的GCD
LINK:数列的GCD
题意:
给出一个长度为N的数列{a[n]},1<=a[i]<=M(1<=i<=N)。
现在问题是,对于1到M的每个整数d,有多少个不同的数列b[1], b[2], ..., b[N],满足:
(1)1<=b[i]<=M(1<=i<=N);
(2)gcd(b[1], b[2], ..., b[N])=d;
(3)恰好有K个位置i使得\(a_i\neq b_i\)(1<=i<=N)
注:gcd(x1,x2,...,xn)为x1, x2, ..., xn的最大公约数。
输出答案对1,000,000,007取模的值。
我没能想出来这道题 感觉有点虚。应该多思考一下的。
有K个位置恰好不相等 n-K个位置恰好相等 设当前处理的gcd为d 那么a序列能和b序列刚好相等的数的个数为M.M为a序列中为d的倍数的个数。
那么有C(M,n-k)的方案 剩下的方案 考虑这M-n+k个位置只有\(\lfloor \frac{M}{d}\rfloor-1\)种可能。
这里注意是排列 不是组合(我傻了想成这里运用隔板法了 剩下的 n-M个位置 就有\(\lfloor \frac{M}{d}\rfloor\)可能。
最后发现 有不合法的情况可以发现不合法的情况为gcd为d的倍数 所以此时把d的倍数的答案都减掉即可。
const int MAXN=300010;
int n,m,k;
int a[MAXN],vis[MAXN];
ll fac[MAXN],inv[MAXN],ans[MAXN];
inline ll ksm(ll b,int p){if(p<0)return 0;ll cnt=1;while(p){if(p&1)cnt=cnt*b%mod;b=b*b%mod;p=p>>1;}return cnt;}
inline ll C(int a,int b){if(a<b)return 0;return fac[a]*inv[b]%mod*inv[a-b]%mod;}
int main()
{
freopen("1.in","r",stdin);
get(n);get(m);get(k);fac[0]=1;k=n-k;
rep(1,n,i)++vis[get(a[i])],fac[i]=fac[i-1]*i%mod;
inv[n]=ksm(fac[n],mod-2);
fep(n-1,0,i)inv[i]=inv[i+1]*(i+1)%mod;
fep(m,1,i)
{
ll cnt=0,sum=vis[i];
for(int j=2;j*i<=m;++j)cnt=(cnt+ans[j*i])%mod,sum+=vis[i*j];
ans[i]=C(sum,k)*ksm(m/i-1,sum-k)%mod*ksm(m/i,n-sum)%mod;
ans[i]=(ans[i]-cnt+mod)%mod;
}
rep(1,m,i)printf("%lld ",ans[i]);
return 0;
}
bzoj 4305 数列的GCD的更多相关文章
- BZOJ 4305: 数列的GCD( 数论 )
对于d, 记{ai}中是d的倍数的数的个数为c, 那么有: 直接计算即可,复杂度O(NlogN+MlogM) --------------------------------------------- ...
- 【BZOJ 4305】 4305: 数列的GCD (数论)
4305: 数列的GCD Description 给出一个长度为N的数列{a[n]},1<=a[i]<=M(1<=i<=N). 现在问题是,对于1到M的每个整数d,有多少个不 ...
- 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)
首先我们来看一道题 BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...
- bzoj 4303 数列
bzoj 4303 数列 二维 \(KD-Tree\) 模板题. \(KD-Tree\) 虽然在更新和查询的方式上类似于线段树,但其本身定义是类似于用 \(splay/fhq\ treap\) 维护区 ...
- [BZOJ 2989]数列(二进制分组+主席树)
[BZOJ 2989]数列(二进制分组+主席树) 题面 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[ ...
- [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块)
[BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块) 题面 给定N, M,求\(1\leq x\leq N, 1\leq y\leq M\)且gcd(x, y)为质数的(x, y)有多少对. ...
- [BZOJ 2989]数列(CDQ 分治+曼哈顿距离与切比雪夫距离的转化)
[BZOJ 2989]数列(CDQ 分治) 题面 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[y]| ...
- BZOJ.4052.[Cerc2013]Magical GCD(思路)
BZOJ \(Description\) 给定\(n\)个数的序列\(a_i\).求所有连续子序列中,序列长度 × 该序列中所有数的gcd 的最大值. \(n\leq10^5,\ a_i\leq10^ ...
- bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛
Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...
随机推荐
- OldTrafford after 102 days
THE RED GO MARCHING ON One Team One Love Through the highs and the lows One hundred and two long ...
- zabbix fping 监控网络质量
1,zabbix server (proxy)安装fping wget http://www.fping.org/dist/fping-3.16.tar.gz tar zxvf fping-3.16. ...
- JAVA基础笔记10-11-12-13-14
十.今日内容介绍 1.继承 2.抽象类 3.综合案例---员工类系列定义 01继承的概述 *A:继承的概念 *a:继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系 *b:在J ...
- ASP.NET CORE MVC用时分析工具MiniProfiler
ASP.NET CORE MVC用时分析工具MiniProfiler MiniProfiler(https://miniprofiler.com/)是一个轻量级且简单易用的分析工具库,它可以用来分析A ...
- Spring-Validation(数据校验) 你值得拥有
前言 最近看到很多童鞋在项目中的对请求参数的校验都用的if来判断各参数的属性,如: if(StringUtils.isBlank(username)){ return RR.exception(&qu ...
- day16 三层装饰器和迭代器
一. 经典的两层装饰器,也是标准装饰器 案例 import time def outter1(func): def wrapper(*args, **kwargs): start = time.tim ...
- JVM 专题六:运行时数据区(一)概述
1. 运行时数据区架构图 2. 内存 内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行.JVM内存布局规定了JAVA在运行过程中内存申请.分配.管理的策略, ...
- linux专题(一):小白的开始以及相关的学习链接
转载自:https://www.cnblogs.com/ggjucheng/archive/2011/12/16/2290158.html 学习Linux也有一阵子了,这过程中磕磕撞撞的,遇到了问题, ...
- 李航统计学习方法(第二版)(五):k 近邻算法简介
1 简介 k近邻法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别,可以取多类.k近邻法假设给定一个训练数据集,其中的实例类别已定.分类时,对新的实例,根据其k个最近邻的训练实例的类别,通 ...
- 数据可视化之分析篇(六)使用Power BI进行流失客户分析
https://zhuanlan.zhihu.com/p/73358029 为了提升销量,在不断吸引新客户的同时,还要防止老客户离你而去,但每一个顾客不可能永远是你的客户,不可避免的都会经历新客户.活 ...