luogu#P8961. 「WHOI-4」ggcd

    ID: 12946 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 5 上传者: 标签>数论Special JudgeO2优化素数判断,质数,筛法中国剩余定理,CRT

「WHOI-4」ggcd

题目背景

如何输入输出 __int128

__int128 read() {
  char c = getchar();
  __int128 x = 0;
  bool f = 0;
  for (; !isdigit(c); c = getchar()) f ^= !(c ^ 45);
  for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
  if (f) x = -x;
  return x;
}
void write(__int128 x, char c = '\0') {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
  if (c != '\0') putchar(c);
}

题目描述

本题已新增一组样例,请注意查看。

小 Y 给了你长度为 nn 的数组 yy 以及一个正整数 mm,保证 0yi<m0\le y_i<m,请你构造一个同样长为 nn 的数组 xx,使得:

  1. xix_i__int128 范围内;
  2. ximodm=yix_i\bmod m=y_i
  3. gcd(x1,,xn)modm\gcd(|x_1|,\cdots,|x_n|)\bmod m 最大。

注意,xix_i 可以为负,此时 m(xiyi)m\mid (x_i-y_i)0yi<m0\le y_i<m

输入格式

第一行两个正整数 n,mn,m

接下来一行 nn 个非负整数,代表 ximodmx_i \bmod m 的值。

输出格式

第一行一个非负整数 gg,代表 gcd(x1,x2,,xn)modm\gcd(|x_1|,|x_2|,\cdots,|x_n|)\mod m 的可能最大值。

接下来一行 nn 个整数,代表 xix_i

1 10
4
6
-6
1 10
7
7
7
2 9
3 3
6
12 -6
10 7
1 2 3 4 5 6 0 1 2 3
6
36 30 24 18 12 6 42 -6 30 24

提示

数据范围

本题采用捆绑测试。

Subtask 1(3030 pts):mm 是素数。

Subtask 2(7070 pts):无特殊限制。

对于所有数据,保证 2m1092\le m \le10^91n1061\le n\le10^6

关于 Special Judge

对于每个测试点:

如果你输出的格式不正确,你将会获得 00 分。

如果你输出的数中有不在 __int128 范围的数,可能导致溢出所以你可能无法获得预期的分数。

如果你的数列 xx 不符合题目给定的 yy,你将会获得 00 分。

如果你的数列 xx 不符合你输出的 gg,你将会获得 00 分。

如果你的 gg 不为最大,你将会获得 00 分。

否则你将获得该测试点的所有分数。