P14035 [PAIO 2025] GCD
题目背景
**DO NOT** include `gcd.h`. Submit using C++ >=17.
题目描述
给定一个长度为 $N$ 的整数序列 $A[1], A[2], \dots, A[N]$。另给定两个整数 $K$ 和 $V$。
设 $\text{gcd}(X_1, X_2, \dots, X_k)$ 表示整数 $X_1, X_2, \dots, X_k$ 的最大公约数。例如,$\text{gcd}(14, 21) = 7$,$\text{gcd}(4, 8, 15) = 1$。
定义函数 $f_{l,r}(x) = \text{gcd}(A[1], A[2], \dots, A[l], A[r], \dots, A[N])^K \oplus x$,其中 $\oplus$ 表示按位异或运算。你的任务是计算如下和:
$$ \left(\sum_{x=0}^{V} \sum_{l=1}^{N} \sum_{r=l+1}^{N} f_{l,r}(x) \cdot (A[l] + A[r])\right) \bmod 998\,244\,353 $$
### 实现细节
你需要完成名为 `calculate_sum` 的函数:
```c
int32 calculate_sum(int32 N, int32 K, int32 V, int32[] A);
```
* $N$:序列中整数数量;
* $K$:指数;
* $V$:$x$ 的最大值;
* $A$:整数序列;
* 在程序开始时,每个测试用例调用本函数的次数最多不超过100次。
这个函数应返回下式的值:
$$ \left(\sum_{x=0}^{V} \sum_{l=1}^{N} \sum_{r=l+1}^{N} f_{l,r}(x) \cdot (A[l] + A[r])\right) \bmod 998\,244\,353 $$
输入格式
无输入。
输出格式
无输出。
说明/提示
### 示例
#### 示例 1
考虑如下调用:
```c
calculate_sum(3, 2, 3, [3, 6, 2]);
```
应返回 132。
#### 示例 2
考虑如下调用:
```c
calculate_sum(7, 1, 0, [1, 2, 3, 4, 5, 6, 7]);
```
应返回 168。
### 示例评测器
评测器按照以下格式读取输入:
- 第 1 行:三个整数 $N, K, V$
- 第 2 行:$N$ 个整数 $A[1], A[2], \dots, A[N]$
评测器会调用 `calculate_sum(N, K, V, A)` 并输出返回的值。
# 约束条件
- $1 \le N \le 5 \times 10^5$
- $0 \le K \le 100$
- $0 \le V \le 10^9$
- 对于每个 $i=1 \dots N$,$1 \le A[i] \le 10^9$
# 评分
1. 子任务 1(4 分):$N=1, K=1$
2. 子任务 2(8 分):$N \le 100, K \le 2, V \le 100$
3. 子任务 3(15 分):$N \le 100, K \le 100, V \le 100$
4. 子任务 4(11 分):$N \le 10^5, K=0$
5. 子任务 5(17 分):$N \le 10^5, V=0$
6. 子任务 6(21 分):$N \le 10^5, K \le 2$
7. 子任务 7(11 分):$N \le 10^5$
8. 子任务 8(13 分):无额外限制。
由 ChatGPT 5 翻译