HDU 4675 GCD of Sequence(数论+组合数学||莫比乌斯反演)

手把手教你用西门子博图V18配置阿特拉斯PF6000拧紧枪PN通讯(附完整GSD文件与ToolsTalk配置文件) 本文详细介绍了如何使用西门子博图V18配置阿特拉斯PF6000拧紧枪的PN通讯,包括硬件连接、网络参数规划、ToolsTalk软件配置及博图工程设置。通过完整的GSD文件和配置文件,帮助工程师快速实现高精度拧紧设备与PLC的高效通讯,适用于汽车装配和电子制造等工业自动化场景。 阅读详情

GCD of Sequence

 Alice is playing a game with Bob.
Alice shows N integers a 1, a 2, …, a N, and M, K. She says each integers 1 ≤ a i ≤ M.
And now Alice wants to ask for each d = 1 to M, how many different sequences b 1, b 2, …, b N. which satisfies :
1. For each i = 1…N, 1 ≤ b[i] ≤ M
2. gcd(b 1, b 2, …, b N) = d
3. There will be exactly K position i that ai != bi (1 ≤ i ≤ n)

Alice thinks that the answer will be too large. In order not to annoy Bob, she only wants to know the answer modulo 1000000007.Bob can not solve the problem. Now he asks you for HELP!
Notes: gcd(x 1, x 2, …, x n) is the greatest common divisor of x 1, x 2, …, x n 

Input
The input contains several test cases, terminated by EOF.
The first line of each test contains three integers N, M, K. (1 ≤ N, M ≤ 300000, 1 ≤ K ≤ N)
The second line contains N integers: a 1, a 2, …, a n (1 ≤ a i ≤ M) which is original sequence.

Output
For each test contains 1 lines :
The line contains M integer, the i-th integer is the answer shows above when d is the i-th number.
Sample Input

3 3 3
3 3 3
3 5 3
1 2 3

Sample Output

7 1 0
59 3 0 1 1

Hint

In the first test case :
when d = 1, {b} can be :
(1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 2, 2)
(2, 1, 1)
(2, 1, 2)
(2, 2, 1)
when d = 2, {b} can be :
(2, 2, 2)
And because {b} must have exactly K number(s) different from {a}, so {b} can't be (3, 3, 3), so Answer = 0
题意:

给你一个数数组a[i],其中给出的每一个数字和要求的数字都是属于[1,m],现在问你根据a[]a[i],其中给出的每一个数字和要求的数字都是属于[1,m],现在问你根据a[]构造一个b[],且a和b中间的不相等的元素的个数恰好有kb[],且a和b中间的不相等的元素的个数恰好有k个。

现在问你gcd(b[])分别为1,2,……,m的个数分别有多少种可能情况gcd(b[])分别为1,2,……,m的个数分别有多少种可能情况。

分析:

通过以往的做题经验我们知道,对于求一个范围内含有确定的因数dd的个数并不好求,但是好求的是一个范围内含有因数d及其倍数的数字的数量即总数除以d

那么对于这道题我们思路可以从大到小枚举m假设枚举的数是i,我们首先可以求出mi,我们首先可以求出m范围内有多少个数因子含有i及其i的倍数及为num=mi(mi及其i的倍数及为num=mi(m范围内只有这么多,这是全部)

那么实际给定的aa数列中有多少是满足这个条件的数呢?

我们输入时完全可以记录每个数的个数(因为a数列每个数并不大),这样我们只需从i每次以i为步长统计出a数列中的含有i及其i的倍数作为因子的数的个数及为cura数列中的含有i及其i的倍数作为因子的数的个数及为cur

那么总数n减去这个个数剩下的就是an减去这个个数剩下的就是a数列中不满足条件的数的个数即n−curn−cur

这个时候我们就需要判断,因为我们只能确定的修改k个值,那么这时就分了三种情况

1)n−cur>k:n−cur>k:
这里写图片描述

说明剩下的需要修改的数大于k个才能保证每个数含有因子是为i及其i的倍数从而保证gcd=ik个才能保证每个数含有因子是为i及其i的倍数从而保证gcd=i,而题目要求我们只能该k个那么在这种情况下将没有符合条件的bb数列,因而答案为0。

2)n−cur=k:
这里写图片描述

此时说明剩下的数恰好k个那么我们直接修改即可了根据上面我们知道共有num=minum=mi种选择,共有k个需要选因此共有numn−cur=numknumn−cur=numk种

3)n−cur<k:n−cur<k:

这里写图片描述

说明剩下的a数列中不满足条件的数的个数小于k个,而我们又必须要该ka数列中不满足条件的数的个数小于k个,而我们又必须要该k个,因此我们只能再从已将满足条件的数中再修改cur+k−ncur+k−n个,因此这cur+k−ncur+k−n需要从满足条件的curcur中选,此时便需要用到组合数Ccur+k−ncurCcurcur+k−n中,而每个我们可以替换的数是num中除去anum中除去a中原来那个数本身,因此每个位置还有num−1num−1种选择即(num−1)cur+k−n(num−1)cur+k−n,所以这种情况下我们除了需要把n−curn−cur个不满足条件的位置修改,该需要把cur+k−ncur+k−n个已经满足条件的修改以凑够修改k个数

因此答案为情况2和情况3的组合即为

numn−cur×Ccur+k−ncur×(num−1)cur+k−nnumn−cur×Ccurcur+k−n×(num−1)cur+k−n

综上我们就求得了b数组的gcd为i即ib数组的gcd为i即i的倍数的所有可能情况

我们当然不想要gcd为i的倍数的情况,因此需要减去,这时就体现出了mgcd为i的倍数的情况,因此需要减去,这时就体现出了m从大到小枚举的好处,我们发现当我们求得i是i得i是i的倍数的情况已经求出来了,因此我们只需要在遍历一遍i的倍数的答案之间减去即可。

code:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 300003;
const int mod = 1e9+7;
typedef long long ll;
int a[maxn],f[maxn],n,m,k,ai,tep;
ll P[maxn],Q[maxn];

ll q_pow(ll a,ll b){
    ll ans = 1;
    while(b){
        if(b & 1)
            ans = ans * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return ans;
}

ll C(ll x,ll y){
    if(y == 0 || x == y) return 1;
    ll ans = P[x] * Q[y] % mod;
    ans = ans * Q[x-y] % mod;
    return ans;
}

int main(){
    ll cur,tot,num;
    Q[1] = P[0] = 1;
    for(int i = 1; i < maxn; i++){
        P[i] = (P[i-1] * i) % mod;
        Q[i] = q_pow(P[i],mod-2);
    }
    while(scanf("%d%d%d",&n,&m,&k) != EOF){
        for(int i = 1; i <= m; i++) a[i] = f[i] = 0;
        for(int i = 1; i <= n; i++){
            scanf("%d",&ai);
            a[ai]++;
        }
        for(int i = m; i > 0; i--){
            cur = 0;
            tot = 1;
            num = m / i;
            for(int j = i; j <= m; j += i) cur += a[j];
            if(n - cur > k){
                f[i] = 0;
                continue;
            }
            tot = q_pow(num,n-cur);
            if(n - cur != k){
                tep = C(cur,k+cur-n) * q_pow(num-1,k+cur-n) % mod;
                tot = tot * tep % mod;
            }
            f[i] = tot;
            for(int j = i + i; j <= m; j += i){
                f[i] -= f[j];
                if(f[i] < 0) f[i] += mod;
            }
        }
        printf("%d",f[1]);
        for(int i = 2; i <= m; i++){
            printf(" %d",f[i]);
        }
        printf("\n");
    }
    return 0;
}

实际上经过上面的分析我们发现,上面我们说的三种情况实际上都可以用第三种情况表示即

numn−cur×Ccur+k−ncur×(num−1)cur+k−nnumn−cur×Ccurcur+k−n×(num−1)cur+k−n

这个公式可以完整的表示三种情况

而且这是求的gcd = i的倍数的个数

由此我们想到了莫比乌斯反演

此时的

F(i)=numn−cur×Ccur+k−ncur×(num−1)cur+k−nF(i)=numn−cur×Ccurcur+k−n×(num−1)cur+k−n

所以

f(x)=∑x|dμ(dx)⋅F(d)f(x)=∑x|dμ(dx)⋅F(d)

只要预处理数F(d)数F(d),然后直接求和累加即可,代码就不再写了,只说一下莫比乌斯反演的思路

银河麒麟V10SP1系统盘瘦身指南:如何制作一个只含必需软件的轻量级安装镜像 本文详细介绍了银河麒麟V10SP1系统盘瘦身的完整流程,从依赖分析到最小化镜像构建,帮助用户创建只含必需软件的轻量级安装镜像。通过智能包筛选、KickStart定制和性能优化,显著减少ISO体积和部署时间,适用于服务器批量部署等场景。 阅读详情

相关推荐

HI3516CV610海思SOC:超高清智慧视觉开发全攻略

本文全面解析海思HI3516CV610 SOC在超高清智慧视觉开发中的应用。该芯片集成双核A7处理器、1Tops NPU、AI ISP及4K视频编码器,专为智能摄像头设计。文章详细介绍了开发环境搭建、核心硬件架构、媒体处理平台(MPP)实战、AI算法集成与系统调优等全流程攻略,帮助开发者高效构建稳定可靠的视觉AI产品。

weixin_29269441的博客 1251

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, …, b N) = d\) 3. 恰好有k个位置 \(bi!=ai\) 求对每个d,有多少种满足条件的序列 分析:对于前两个条件,就是单纯的莫比乌斯反演。 令\(F(d) = [d|gcd(b1...bN...

weixin_30824599的博客 183

Pixel 6 Pro刷Android 13变砖自救指南:fastboot全分区擦除与手动刷入教程

本文提供了一份详细的Pixel 6 Pro在Android 13升级过程中变砖后的自救指南。针对因super分区锁死或动态分区异常导致的无法启动问题,文章核心介绍了通过fastboot命令手动擦除关键分区并逐一刷入官方镜像的完整救砖流程,帮助用户实现系统重建与恢复。

weixin_29208327的博客 369

HDU 4675 GCD of Sequence(容斥)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4675 题意:给出n,m,K,一个长度为n的数列A(1&lt;=A[i]&lt;=m)。对于d(1&lt;=d&lt;=m),有多少个长度为n的数列B满足: (1)1&lt;=B[i]&lt;=m; (2)Gcd(B[1],B[2],……,B[n])=d; (3)恰有K个位置满足A[i]!=B[...

weixin_33858336的博客 119

从网格划分到结果解读:一次完整的子弹侵彻LS-DYNA仿真避坑指南

本文详细解析了子弹侵彻LS-DYNA仿真中的关键技术与避坑指南,涵盖网格优化、对称边界条件设置、沙漏控制参数调整及结果可信度验证。通过HyperMesh网格划分和LS-DYNA高级参数配置,帮助工程师提升仿真精度与效率,确保计算结果物理可信。

weixin_29816689的博客 406

STM32F411CEU6实战:用W25Q64存储多张图片,在240x240 LCD上轮播显示(附源码)

本文详细介绍了如何使用STM32F411CEU6通过SPI接口管理W25Q64 Flash中的多张图片,并在240x240 LCD上实现平滑轮播显示。内容涵盖硬件配置、图片存储方案设计、轮播系统实现及性能优化技巧,特别针对SPI传输优化和多图存储管理提供了实用解决方案。附源码,适合嵌入式开发者参考。

weixin_32025789的博客 308

GCD of Sequence(数论,组合数学)

思路:对于直接求gcd等于d的情况不太好处理,按照数论的思维,考虑求出gcd为d以及d的倍数的情况,然后再将结果删去d的倍数的情况。首先用一个数组存储每一个出现的次数。然后枚举i及i的倍数,求出所给的数组中有几个数是i及i的倍数,记为cur,对于一个数组要使得gcd是d或d的倍数,那么每一个数都要是d或d的倍数,这时n-cur为数组中不符合条件的个数,如果这个个数大于k,表示无论如何都无法修改。等于k,表示正好可以将不满足的数改成满足的数,组合数为numknum^knumk,其中num为m/i,及m范围内d

qq_43543086的博客 367

Cocos Creator发布微信小游戏:深度定制与去除默认加载页面的实践指南

本文详细介绍了如何使用Cocos Creator发布微信小游戏时去除默认加载页面的实践方法。通过修改构建配置和重写启动逻辑,开发者可以自定义加载体验,提升品牌一致性。文章还提供了进阶优化方案和常见问题解决方案,帮助开发者实现更专业的微信小游戏发布流程。

weixin_27972919的博客 568

HDU 4675GCD of Sequence(大组合数取模 容斥原理 组合数学)

Problem LinkGCD of Sequence 大意,对于序列aia_i 中的找一个序列bib_is.tgcd(bi)=d,1≤bi,d≤m,bigcd(b_i) = d, 1\le b_i,d\le m,b_i,恰好有k个数与aia_i不相等,问对于每一个dd问这样的序列有多少个,结果MOD 1e9+7;Analyse设f(d)表示d|gcd(bi)f(d)表示d|gcd(b_i)的个数

taotao 的大学墓志 874

ArcGIS新手必看:5分钟搞定等高线转DEM栅格(附完整操作截图)

本文详细介绍了在ArcGIS中将等高线转换为DEM栅格的完整流程,包括CAD数据预处理、TIN转栅格和直接插值法两种核心方法,以及常见问题排查与优化技巧。通过实战案例和操作截图,帮助GIS新手快速掌握这一测绘数据处理的核心技能,提升地形分析和三维可视化效率。

dapp9builder的博客 285

122、Android Camera HAL3 框架:Request、Result、Metadata 的异步管道模型

本文深入剖析了Android Camera HAL3框架中的异步管道模型,围绕Request、Result和Metadata三个核心要素展开。作者通过实际案例(黑屏闪退问题)切入,揭示了异步模型中常见的帧序错乱陷阱。文章详细阐释了三个角色的交互机制,指出HAL3采用生产者-消费者模式的关键特征:Request与Result一一对应但不保证顺序。针对开发实践,总结了三个必须加锁的场景和回调函数的锁使用禁忌,并给出解决帧序问题的具体方案(独立帧号生成器)。最后提出五项经验性建议,强调异步模型带来的灵活性与复杂性

sundong_81的博客 212

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

先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N integers a 1, a 2, …, a N, and M, K. She says each integers 1 ≤ a i ≤ M. And now Alice wants to ask ...

日拱一卒,功不唐捐 2826

SKUA-GOCAD入门教程-第六节

DisplayElements窗口是用于浏览和处理项目数据的工具,包含多个数据浏览器,如模型列表、对象、未分类对象、属性数据及资源数据。

江洋大葱的博客 983

HDU 4675 GCD of Sequence(莫比乌斯反演)

http://acm.hdu.edu.cn/showproblem.php?pid=4675 题意:给 NNN 个数 aiaia_i,让 aiaia_i 变成 bibib_i,变的范围为 111~MMM,但是要求要有 KKK 个位置的 ai和biai和bia_i和b_i 不相等,要求输出 bbb 这个数组的所有元素的 gcd=1,2,3....Mgcd=1,2,3....Mgcd=1,2,3.....

帅气廖鹏飞 425

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

HDU 4675 GCD of Sequence (莫比乌斯反演)

题意:给nn个数,a1,a2,...,ana_1,a_2,...,a_n,其中1<=ai<=M1<=a_i<=M,找出所有的满足条件的序列b1,b2,...,bnb_1,b_2,...,b_n使得gcd(b1,b2,...,bn)=dgcd(b_1,b_2,...,b_n)=d,其中1<=bi<=M1<=b_i<=M,且序列{bib_i}中有且仅有kk个bi!=aib_i!=a_i。f(d)f(d)

无限大な梦のあとの 何もない世の中じゃ 1714

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

题意: 给出\(M\)和\(a数组\),询问每一个\(d\in[1,M]\),有多少组数组满足:正好修改\(k\)个\(a\)数组里的数使得和原来不同,并且要\(\leq M\),并且\(gcd(a_1,a_2,\dots,a_n)=d\)。 思路: 对于每一个\(d\),即求\(f(d)\):修改\(k\)个后\(gcd(a_1,a_2,\dots,a_n)=d\)的对数。 那么假设\...

weixin_30412577的博客 196

HDU 4675 GCD of Sequence(数论+莫比乌斯反演)

Alice is playing a game with Bob. Alice shows N integers a1, a2, …, aN, and M, K. She says each integers 1 ≤ ai≤ M. And now Alice wants to ask for each d = 1 to M, how many different sequences b...

qq_43642142的博客 191

解题报告: HDU_4675 GCD of Sequence 计数

题目链接: 题意: 给定长度为n的一个正整数序列,里面每个数的大小均为最大为m,让你构造出另一个等长的正整数序列要求满足一下三个条件: 1、数列里的每个数小于等于m。 2、整个数列的最大公因子为d。 3、你构造出的数列与原数列对应位置上的数刚好有k对不相等。 询问你当d 分别为 1~m 时,能构造出序列的种类数。 思路: 不好直接考虑计算最大公因子刚好为d的结果(设为f(d)),那

Hee的博客~ 304

HDU 4675 GCD of Sequence (莫比乌斯反演第二种形式+组合数学)*

GCD of Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 1979    Accepted Submission(s): 701   Problem Description Alice is playing a...

满月照亮的路 355

hdu4675 GCD of Sequence

题目链接: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...

weixin_30480583的博客 144

hdu4675——GCD of Sequence(莫比乌斯反演+组合数取模+乘法逆元+快速幂)

GCD of Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 1595    Accepted Submission(s): 540 Problem Description Alice is playin

我在浪里 652

HDU 4675-GCD of Sequence(莫比乌斯反演+组合数+逆元)

题意:给你n,m,k,然后给你一个长为n的序列,让你只能改变k个数的情况下,使得gcd(a1.....an)=d,d从1到m,问你相应的方案数。 题解:首先我们要知道若干个数的gcd=d的前提是这几个数都至少是d的倍数,不然无法满足情况,齐次因为要保证只能改变k个数,我们可以开一个num数组记录每个数的倍数出现的个数,假如当前枚举到数字i,如果num[i] 我们设当前i的倍数为cnt[i],有

信仰.的博客 567

codeforces 2.0

思路:这里我们可以声明两个变量 l和r,从左向右遍历1.如果l>=0,l就累加这个数2.如果l<0,就让r加上这个数,此时如果r<0就让l加上这个r,r重新赋值为0,此时l仍然为负数3.如果l<0,就让r加上这个数,此时如果r>0,保留r不变,继续往后遍历。最后我们得到两种可能:1.l>=0,r=0。这种情况下答案就是l2.l<0 r>=0。这种情况下答案就是abs(l)+r。

2401_88110477的博客 456

HDU - 4675(莫比乌斯反演)

Alice is playing a game with Bob. Alice shows N integers a 1, a 2, …, a N, and M, K. She says each integers 1 ≤ a i ≤ M. And now Alice wants to ask for each d = 1 to M, how many different sequenc

baidu_35522092的博客 652

hdu 4675 GCD of Sequence(计数)

题目链接:hdu 4675 GCD of Sequence代码#include <cstdio> #include <cstring> #include <vector> #include <algorithm>using namespace std; const int maxn = 300000; const int mod = 1e9 + 7;int fac[maxn + 5], inv[ma

不慌不忙、不急不躁 718

HDU - 4675 GCD of Sequence (容斥组合推公式)

题目描述:点击打开链接给一个序列 {an}(ai &lt;= M),问有多少种 {bn} ,满足恰好 k 个位置与 {an} 不同,且 gcd of {bn} = d(1&lt;= d &lt;=M)。很灵巧的题,我们首先把a中d的倍数的数目统计出来,假设为x个,如果x&lt;=n-k的话答案肯定是不存在的,问题是答案存在的情况怎么求,我们可以确定的是b中有n-x个位置肯定无法从a中直接得到d的倍...

hyesuixin的博客 353

老逗的gcd 莫比乌斯反演

这个题一看就是莫比乌斯反演,怎么处理无平方因子数呢?由莫比乌斯函数的性质,不难写出: 简单反演得: 那么令 重点在于处理的这个函数的值,用传统筛的话可以加一个小优化就是底数和倍数都只枚举Mob不为0的数 即设Cur数组保存所有Mob不为0的数 有 #include #include using namespace std; typedef long long LL; const

liuguangzhe 1337
上一篇: Jacobi symbol(二次剩余+欧拉准则)
下一篇: HDU 5223 GCD(模拟)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值