Educational Codeforces Round 138 (Rated for Div. 2)D. Counting Arrays(数学)

146 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情
本文已参与「新人创作礼」活动,一 起开启掘金创作之路。

[题目](Problem - D - Codeforces)

image.png

中文翻译

如果gcd(ai,i)=1,其中gcd表示最大公除数,则有可能移除a的第i个元素。一个元素被移除后,右边的元素会向左移动一个位置。 一个有n个整数的数组b,如果有可能去除a的所有元素,那么1≤bi≤n-i+1就是数组a的一个去除序列,如果你去除b1-13个元素,然后是b2-13,然后是bn-13个元素。例如,让a=[42,314]。 [1,1]是一个移除序列:当你移除数组的第1个元素时,条件gcd(42,1)=1成立,数组变成[314];当你再次移除第1个元素时,条件gcd(314,1)=1成立,数组变成空。 [2,1]不是一个移除序列:当你试图移除第2个元素时,条件gcd(314,2)=1为假。 如果一个数组至少有两个移除序列,那么它就是模糊的。例如,数组[1,2,5]是模糊的:它有删除序列[3,1,1]和[1,2,1]。数组[42,314]是不含糊的:它唯一的删除序列是[1,1]。 给你两个整数n和m,你必须计算模糊数组a的数量,使a的长度从1到n,每个ai是1到m的整数。

题目大意

给我们长度一个为n的数组数组中每一个元素的大小都不会超过m在数组中如果我们想要删除一个数那么gcd(ai,i)==1gcd(a_i,i)==1删除过后右边的数自动向左补齐问在不大于n长度的所有的数组中删除方式大于两种的一共有多少个

解法

因为所有数字与1求最大公因数肯定是1所一每一个数组都至少有一种删除方法所有对于这题我们只需要求出所有的数组种数然后减去所有的只有一种删除方法的数组个数即可。
那么怎么确定这个数组只有一种删除方法呢?
我们发现因为只有gcdgcd为1才可以删除所有aiia_i与i肯定是互质的所有我们只需要保证对于每一位上的aia_i他是<=i<=i的质数的乘积就行这样就可以保证除了与1求gcdgcd肯定不为1的情况