$ \color{#0066ff}{ 题目描述 }$

LJJ 学完了二项式定理,发现这太简单了,于是他将二项式定理等号右边的式子修改了一下,代入了一定的值,并算出了答案。

但人口算毕竟会失误,他请来了你,让你求出这个答案来验证一下。

一共有 \(T\) 组数据,每组数据如下:

输入以下变量的值:\(n, s , a_0 , a_1 , a_2 , a_3\),求以下式子的值:

\(\begin{aligned}\Large \left[ \sum_{i=0}^n \left( {n\choose i} \cdot s^{i} \cdot a_{i\bmod 4} \right) \right] \bmod 998244353\end{aligned}\)

其中 \(n\choose i\) 表示 \(\frac{n!}{i!(n-i)!}\)。

\(\color{#0066ff}{输入格式}\)

第一行一个整数 \(T\),之后 \(T\) 行,一行六个整数 \(n, s, a_0, a_1, a_2, a_3\)。

\(\color{#0066ff}{输出格式}\)

一共 \(T\) 行,每行一个整数表示答案。

\(\color{#0066ff}{输入样例}\)

6
1 2 3 4 5 6
2 3 4 5 6 1
3 4 5 6 1 2
4 5 6 1 2 3
5 6 1 2 3 4
6 1 2 3 4 5

\(\color{#0066ff}{输出样例}\)

11
88
253
5576
31813
232

\(\color{#0066ff}{数据范围与提示}\)

对于 \(50\%\) 的数据,\(T \times n \leq 10^5\);

对于 \(100\%\) 的数据,\(1 \leq T \leq 10^5, 1 \leq n \leq 10 ^ {18}, 1 \leq s, a_0, a_1, a_2, a_3 \leq 10^{8}\)

\(\color{#0066ff}{题解}\)

一个有关n次单位根的公式

\[[n|k]=\frac 1 n \sum_{i=0}^{n-1}\omega_n^{ki}
\]

就不证明了不会

因此,有

\[\sum_{i=0}^na_i[N|i]=\frac{\sum_{i=0}^{n}a_i\sum_{j=0}^{N-1}\omega_N^{ij}}{N}=\frac{\sum_{i=0}^{N-1}f(\omega_N^i)}{N}
\]

其中\(f\)是数列a的生成函数

对于本题,我们考虑把4种情况分开处理,即

\[\sum_{i=0}^3a_i\sum_{j=0}^n[j\bmod4 = i]C_n^i*s^i
\]

构造生成函数

\[\sum_{i=0}^3a_i\sum_{j=0}^nC_n^i*s^i * x^i*1^{n-i}
\]

\[(sx+1)^n
\]

但是,对于\(i\in[1,3]\)怎么处理呢?

考虑平移,把多项式整体乘上一个自变量,便是向右平移了一次

因此,只需变为\(\frac {f(\omega_N^j)}{\omega_N^{ij\bmod 4}}\)即可

#include<bits/stdc++.h>
#define LL long long
LL in() {
char ch; LL x = 0, f = 1;
while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);
for(x = ch ^ 48; isdigit(ch = getchar()); x = (x << 1) + (x << 3) + (ch ^ 48));
return x * f;
}
const int mod = 998244353;
LL w[4], a[4], n, s, c[4];
LL ksm(LL x, LL y) {
LL re = 1LL;
while(y) {
if(y & 1) re = re * x % mod;
x = x * x % mod;
y >>= 1;
}
return re;
}
int main() {
w[0] = 1;
LL g = ksm(3, (mod - 1) / 4);
for(int i = 1; i <= 3; i++) w[i] = w[i - 1] * g % mod;
for(int T = in(); T --> 0;) {
n = in(), s = in(), a[0] = in(), a[1] = in(), a[2] = in(), a[3] = in();
LL ans = 0;
for(int i = 0; i < 4; i++) {
c[i] = 0;
for(int j = 0; j < 4; j++) (c[i] += ksm((s * w[j] + 1) % mod, n) * ksm(w[i * j % 4], mod - 2) % mod) %= mod;
(c[i] *= ksm(4, mod - 2)) %= mod;
(ans += a[i] * c[i] % mod) %= mod;
}
printf("%lld\n", ans);
}
return 0;
}

loj #6485. LJJ 学二项式定理 (模板qwq)的更多相关文章

  1. LOJ #6485 LJJ 学二项式定理

    QwQ LOJ #6485 题意 求题面中那个算式 题解 墙上暴利 设$ f(x)=(sx+1)^n$ 假设求出了生成函数$ f$的各项系数显然可以算出答案 因为模$ 4$的缘故只要对于每个余数算出次 ...

  2. loj 6485 LJJ学二项式定理 —— 单位根反演

    题目:https://loj.ac/problem/6485 先把 \( a_{i mod 4} \) 处理掉,其实就是 \( \sum\limits_{i=0}^{3} a_{i} \sum\lim ...

  3. LOJ 6485 LJJ 学二项式定理——单位根反演

    题目:https://loj.ac/problem/6485 \( \sum\limits_{k=0}^{3}\sum\limits_{i=0}^{n}C_{n}^{i}s^{i}a_{k}[4|(i ...

  4. loj#6485. LJJ 学二项式定理(单位根反演)

    题面 传送门 题解 首先你要知道一个叫做单位根反演的东西 \[{1\over k}\sum_{i=0}^{k-1}\omega^{in}_k=[k|n]\] 直接用等比数列求和就可以证明了 而且在模\ ...

  5. loj #6485. LJJ 学二项式定理 单位根反演

    新学的黑科技,感觉好nb ~ #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s". ...

  6. [LOJ 6485]LJJ学二项式定理(单位根反演)

    也许更好的阅读体验 \(\mathcal{Description}\) 原题链接 \(T\)组询问,每次给\(n,s,a_0,a_1,a_2,a_3\)求 \(\begin{aligned}\left ...

  7. LOJ 6485 LJJ学多项式

    前言 蒟蒻代码惨遭卡常,根本跑不过 前置芝士--单位根反演 单位根有这样的性质: \[ \frac{1}{n}\sum_{i=0}^{n-1}\omega_{n}^{ki}=\left[n|k\rig ...

  8. 【LOJ#6485】LJJ 学二项式定理(单位根反演)

    [LOJ#6485]LJJ 学二项式定理(单位根反演) 题面 LOJ 题解 显然对于\(a0,a1,a2,a3\)分开算答案. 这里以\(a0\)为例 \[\begin{aligned} Ans&am ...

  9. LOJ6485 LJJ 学二项式定理 解题报告

    LJJ 学二项式定理 题意 \(T\)组数据,每组给定\(n,s,a_0,a_1,a_2,a_3\),求 \[ \sum_{i=0}^n \binom{n}{i}s^ia_{i\bmod 4} \] ...

随机推荐

  1. throw和throws的区别和联系

    突然发现今天诗兴大发,看来又得写点内容了. throw和throws对于Java程序员而言它们真的不是很陌生.但对于我这样的选手而言一提到它们的区别和联系就蒙圈了... 为了以后不蒙圈,今天就研究一下 ...

  2. PowerDesigner CDM中取消默认不能存在同名主键的方法

    This data item is already used in a primary identifier.Normalization rules prevent ... 处理的方法为: 菜单栏上的 ...

  3. C#改变LInqToSQL的引用地址,读取config的数据库字符串

    C#改变LInqToSQL的引用地址,读取config的数据库字符串修改Properties 下 Settings.Settings 下 Settings.Designer.cs 下 return ( ...

  4. Anaconda 安装教程(Win10环境) Tensorflow安装

    序 Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候.为了解决这些问题,有不少发行版的Python,比如WinPython.An ...

  5. java格式化数字、货币、金钱

    网上摘来的,以后可能会用到 java开发中经常会有数字.货币金钱等格式化需求,货币保留几位小数,货币前端需要加上货币符号等.可以用java.text.NumberFormat和java.text.De ...

  6. C++面向对象类的实例题目六

    问题描述: 编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计算两个长方形的总面积)时使用对象作为参数. 程序代码: #include<iostream> ...

  7. Luogu 2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm

    基环树森林,然而我比较菜,直接tarjan找环. 发现缩点之后变成了DAG,每一个点往下走一定会走到一个环,缩点之后搜一遍看看会走到哪个环以及那个环的编号是多少,答案就是环的$siz$$ + $要走的 ...

  8. Linux之tcpdump使用详解

    1.1  三种关键字 关于类型的关键字 第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202. ...

  9. RabbitMQ 相关概念和方法详解

    名词解释 ConnectionFactory: 与 RabbitMQ 服务器连接的管理器. Connection: 与 RabbitMQ 服务器的连接. Channel: 与 Exchange 的连接 ...

  10. 存储类型auto,static,extern,register的区别 <转>

    变量和函数的属性包括数据类型和数据的存储类别,存储类别指数据在内存中存储方式(静态和动态),包含auto,static,register,extern四种. 内存中.具体点来说内存分为三块:静态区,堆 ...