首页 > 其他分享 >CF1749D Counting Arrays

CF1749D Counting Arrays

时间:2023-08-22 22:57:56浏览次数:41  
标签:le gcd Arrays CF1749D 删掉 当且 一个 序列 Counting

给定一个数组 \(a\),同时给定一个操作:选取一个数字 \(i\),如果 \(\gcd(a_i,i) = 1\),我们就可以将当前的第 \(i\) 位上的数字 \(a_i\) 移除掉,而后面的数字会以此补上空缺。

定义一个序列 \(b\) 为一个“移除序列”,当且仅当我们可以通过依次选取 \(b_1\) 到 \(b_n\) 进行上面所说的操作,最终将整个 \(a\) 数组移除。

定义一个数组 \(a\) 是不好的,当且仅当其有不止一个移除序列。你需要统计出长度为 \([1,n]\) 范围内正整数的,各元素为 \([1,m]\) 范围内正整数的不好的序列的个数,模 \(998244353\)。

\(n \le 3 \times 10^5\),\(m \le 10^{12}\)。

题意是抄翻译的请见谅。

首先一个序列最少也会有一个删除序列,因为可以把下标 \(1\) 对应的数一个一个删掉。题目中规定一个数 \(a_i\) 可以在位置 \(i\) 被删掉,当且仅当 \(a_i \perp i\),然后一个关键观察是,在原数组中位置为 \(i\) 的数,如果没有被途中删除的话,那么在删除过程中一定会经过 \([1, i]\) 的所有位置,那么我们发现,一个数不能在途中被删掉,当且仅当对于任意 \(j \in [2, i]\),都有 \(a_i \not \perp j\),即 \(\gcd(a_i, j) \not = 1\)。

正难则反,将问题转化为求好的方案数。由上边的分析我们得到,一个序列是好的,当且仅当对于任意 \(2 \le j \le i \le n\),都有 \(\gcd(a_i, j) \not = 1\),也就意味着 \(a\) 中的所有数都只能在位置 \(1\) 被删掉,也就只有一种删除序列了。通过算数基本定理,满足对于所有 \(i \in [2, n]\) 的 \(i\),满足 \(\gcd(x, i) \not = 1\) 的最小 \(x\) 为 \([2, n]\) 中所有出现过的质因子的乘积(每个只乘一次)。那么位置 \(i\) 上满足上述条件的数的个数就等于 \(\lfloor \dfrac{m}{\prod_{j \in \mathbb{P} \land j \le i} j} \rfloor\)。那么根据乘法原理,直接对 \([1, n]\) 累乘即可得到好的序列的个数。

因为 \(m\) 太大了可能会出现 long long 溢出,因此需要龟速乘。时间复杂度线性对数。

代码

标签:le,gcd,Arrays,CF1749D,删掉,当且,一个,序列,Counting
From: https://www.cnblogs.com/forgot-dream/p/17649869.html

相关文章

  • 6. 权责发生制 Accrual Accounting Basis
    Profitability盈利能力盈利Profit=收入Revenue-开支Expense1.什么是权责发生制在会计学中,收入并不等于收款,开支并不等于付款。将收入和支出记录在它们发生的周期内,而不一定是收款和付款的周期内,这就是权责发生制。权责发生就是收入或支出的确认。2.权责发生制的三......
  • 5.2 复式记账法总体流程 Double Entry Accounting
    1.日记账GeneralJournal账簿格式日期、分类账户、增加金额(借方)、减少金额(贷方)日记账像一个银行流水单,它按时间顺序清晰的记录了一个企业在某个时间段所发生的所有商业交易。如下图:2.把日记账内容记录到分类账户LedgerAcount分类账簿格式:分类账户名称、日期(增)、账户(......
  • 2. 会计恒等式 Accounting Equation
    投资人是企业所有者Owner借款给企业的人为债权人Credit'sEquity欠款为企业债务liabilitesAssets=Liabilites+Oner'sEquity资产=债务+所有者权益(AccountingEquation会计恒等式)这就是FinancialPosition财务状况,注意债务是正值它也是资产的一部分Assets......
  • P1672 [USACO05FEB] Feed Accounting S 题解
    题目链接思路一道特别简单的差分模板题,其实也有点推理的感觉。对于每头牛,我们通过两次循环使用差分倒推出在这几天内它对我们饲料消耗的贡献,进而推出每一天的饲料消耗量,从\(D\)天到现在一共吃掉的饲料数为\(F1-F2\)的那一天即是我们所求的。输入的时候依照题意模拟一次差......
  • Arrays 类
    Arrays类-数组的工具类java.util.Arrays-由于数组对象本身并没有什么方法可以供我们调用,但是API中提供了一个工具类Arrays供我们使用,-从而可以对数据对象进行一些基本的操作。-Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而......
  • 题解 CF1857G【Counting Graphs】
    一个非常显然的事情是:总方案数即为每条边方案数之积。树边已经确定,考察每条非树边\((u,v)\)可以怎么取。给定的树\(T\)是唯一最小生成树,这意味着非树边\((u,v)\)要么不存在,要么权值大于\(T\)上\((u,v)\)之间任意一条边的权值。设\(T\)上\((u,v)\)间的最大边权为\(......
  • G. Counting Graphs
    G.CountingGraphsGivenatreeconsistingof$n$vertices.Atreeisaconnectedundirectedgraphwithoutcycles.Eachedgeofthetreehasitsweight,$w_i$.Yourtaskistocountthenumberofdifferentgraphsthatsatisfyallfourconditions:Thegra......
  • 无涯教程-Perl - Arrays(数组)
    数组是一个变量,用于存储标量值的有序列表。数组变量前面有一个“@”符号。要引用数组的单个元素,将使用带符号名称的美元符号($),后跟方括号中的元素索引,这是使用数组变量的简单示例-#!/usr/bin/perl@ages=(25,30,40);@names=("JohnPaul","Lisa","Kumar");......
  • Arrays.asList() 隐藏的陷阱,你避开了吗?
    [Arrays.asList()方法介绍][Arrays.asList()方法的坑][解决Arrays.asList()方法的坑][总结][Arrays.asList()方法介绍][Arrays.asList()方法的坑][解决Arrays.asList()方法的坑][总结]在Java中,我们经常需要将数组转换为List来方便地进行操作。Arrays.asList()方法是一种常见的方式,但是它存在一......
  • Atcoder ABC259H Yet Another Path Counting
    首先可以想到有组合数的方法:令起点为\((x1,y1)\),终点为\((x2,y2)\),则路径方案数就为\(\binom{x2+y2-x1-y1}{x2-x1}\),这样设有\(k\)个相同颜色的点,时间复杂度就为\(O(k^2)\)。再考虑到还有\(\text{DP}\)方法:令\(f_{x,y}\)为走到\((x,y)\)的方案数,不限制......