Jabberwocky I (Ynoi Easy Round 2016)

First Post:

Last Update:

Word Count:
839

Read Time:
4 min

Page View: loading...

早年数论题。

题目链接

给定一个长为 的正整数序列 (1-index),维护两种操作(共 次):

  1. 给定 ,对于所有 ,令
  2. 给定 ,求 ,其中
  • (At beginning);

首先熟知欧拉降幂公式(扩展欧拉定理):

对于第一种情况, 是否互质有时不好讨论,幸好可以直接应用不互质的版本,即


直接应用扩展欧拉定理,我们有

其中 是 Iverson bracket[1]括号内的条件满足则值为 1,不满足则值为 0。

在递归的过程中维护条件是否成立即可。


那么,如此计算的复杂度是什么呢?

首先考虑一个剪枝,若 ,则显然可以直接终止递归过程。

容易证明[2]奇数取欧拉函数后必定变为偶数;偶数取欧拉函数后至少减半,证毕。,从 开始,不断这个数取欧拉函数,最多取 次,就可以把这个数变成

因此递归最多进行 层。


维护区间加是容易的,使用一个差分树状数组,容易做到 区间加, 单点查值。

总的来讲,操作 1 的单次复杂度为 ;操作 2 的单次复杂度为

最开始需要 预处理 的欧拉函数值。

初始化树状数组可以做到 ,但是我懒得写了。

总复杂度

需要特判掉 的情况,由于数组恒正,因此指数取模前是大于 的,故计算时应该取



  1. 1.括号内的条件满足则值为 1,不满足则值为 0。
  2. 2.奇数取欧拉函数后必定变为偶数;偶数取欧拉函数后至少减半,证毕。