LJJ 学二项式定理

题意

\(T\)组数据,每组给定\(n,s,a_0,a_1,a_2,a_3\),求

\[\sum_{i=0}^n \binom{n}{i}s^ia_{i\bmod 4}
\]

对\(998244353\)取模

范围

\(1\le T\le 10^5,1\le n\le 10^{18},1\le s,a_0,a_1,a_2,a_3\le 10^8\)


单位根反演有个套路

\[[k\equiv l \ (\text{ mod } n)\ ]=\frac{1}{n}\sum_{i=0}^{n-1}w_n^{(k-l)}
\]

然后用套路推柿子

\[\begin{aligned}
&\sum_{i=0}^n\binom{n}{i}s^ia_{i \bmod 4}\\
=&\sum_{d=0}^3a_d\sum_{i=0}^n\binom{n}{i}s_i[i\equiv d\bmod 4]\\
=&\sum_{d=0}^3a_d\sum_{i=0}^n\binom{n}{i}s_i(\frac{1}{4}\sum_{j=0}^3w_4^{(i-d)j})\\
=&\frac{1}{4}\sum_{d=0}^3a_d\sum_{j=0}^3\sum_{i=0}^nw_4^{(i-d)j}\binom{n}{i}s^i\\
=&\frac{1}{4}\sum_{d=0}^3a_d\sum_{j=0}^3w_4^{-dj}\sum_{i=0}^n\binom{n}{s}(sw_4^j)^i\\
=&\frac{1}{4}\sum_{d=0}^3a_d\sum_{j=0}^3w_4^{-dj}(sw_4^j+1)^n
\end{aligned}
\]


Code:

#include <cstdio>
#include <cctype>
#define ll long long
const int SIZE=1<<21;
char ibuf[SIZE],*iS,*iT;
#define gc() (iS==iT?(iT=(iS=ibuf)+fread(ibuf,1,SIZE,stdin),iS==iT?EOF:*iS++):*iS++)
template <class T>
void read(T &x)
{
x=0;char c=gc();
while(!isdigit(c)) c=gc();
while(isdigit(c)) x=x*10+c-'0',c=gc();
}
const int mod=998244353;
const int inv4=748683265;
inline int add(int a,int b){return a+b>=mod?a+b-mod:a+b;}
#define mul(a,b) (1ll*(a)*(b)%mod)
int qp(int d,int k)
{
int f=1;
while(k)
{
if(k&1) f=mul(f,d);
d=mul(d,d);
k>>=1;
}
return f;
}
int w[4],a[4],s;
ll n;
int main()
{
int T;read(T);
w[0]=1,w[1]=qp(3,mod-1>>2),w[2]=mod-1,w[3]=mul(w[1],w[2]);
while(T--)
{
read(n),read(s);
int ans=0;
for(int a,i=0;i<4;i++)
{
read(a);int sum=0;
for(int j=0;j<4;j++)
{
int f=add(mul(s,w[j]),1);
sum=add(sum,mul(w[(20-i*j)%4],qp(f,n%(mod-1))));
}
ans=add(ans,mul(a,sum));
}
ans=mul(ans,inv4);
printf("%d\n",ans);
}
return 0;
}

2019.5.7

LOJ6485 LJJ 学二项式定理 解题报告的更多相关文章

  1. loj6485 LJJ 学二项式定理

    题目描述: loj 题解: 单位根反演. $[n|x]=\frac{1}{n} \sum _{i=0}^{n-1} (ω_n^x)^i$ 证明?显然啊,要么停在$(1,0)$要么转一圈. 所以说题目要 ...

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

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

  3. loj #6485. LJJ 学二项式定理 (模板qwq)

    $ \color{#0066ff}{ 题目描述 }$ LJJ 学完了二项式定理,发现这太简单了,于是他将二项式定理等号右边的式子修改了一下,代入了一定的值,并算出了答案. 但人口算毕竟会失误,他请来了 ...

  4. 题解 LOJ-6485 【LJJ学二项式定理】

    题目 由于看到正解的单位根反演过于复杂 (也就是看不懂) 所以自己构造了一个算法,理论上这个算法应该还有成长的空间(可以变得普适性更强) 不知道和单位根反演有没有一样,就发表出来了 反正转载前记得要联 ...

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

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

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

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

  7. 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 ...

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

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

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

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

随机推荐

  1. Java实现按汉语拼音的排序

    public class sortByPinyin { public static void main(String[] args) { String[] arr = { "刘刘" ...

  2. linux文件查找工具——locate,find

    一文件查找介绍 文件的查找就是在文件系统上查找符合条件的文件. 文件查找的方式:locate, find非实时查找也就是基于数据库查找的locate,效率特别高. 实时查找:find 二locate ...

  3. paper 139:qt超强绘图控件qwt - 安装及配置

    qwt是一个基于LGPL版权协议的开源项目, 可生成各种统计图.它为具有技术专业背景的程序提供GUI组件和一组实用类,其目标是以基于2D方式的窗体部件来显示数据, 数据源以数值,数组或一组浮点数等方式 ...

  4. mock 数据 解决方案

    前端工程化之--Mock解决方案   https://www.jianshu.com/p/720b12b5d120 一.为什么要使用mock数据: 1.后端接口数据没有的时候,前端根据接口文档,使用 ...

  5. 推荐两款远程管理Linux工具(基于Windows系统)

    推荐两款远程管理Linux工具(基于Windows系统) 1.Xshell 百度百科:Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows ...

  6. mysql 个人博客应用的建表和相关查询

    一.建表 用户表tb_user create table if not exists tb_user( user_id int auto_increment, ) not null, user_pas ...

  7. Python - 元组 , range

    元组和元组嵌套 元组: 俗称不可变的列表.又被成为只读列表, 元组也是python的基本数据类型之一, 用小括号括起来, 里面可以放任何数据类型的数据, 查询可以. 循环也可以. 切片也可以. 但就是 ...

  8. [轉]Reverse a singly linked list

    Reverse a singly linked list  http://angelonotes.blogspot.tw/2011/08/reverse-singly-linked-list.html ...

  9. Codesforces 485D Maximum Value

                                                      D. Maximum Value   You are given a sequence a cons ...

  10. C++之循环体内变量

    今天做PAT题目时候看人家解答: #include <cstdio> #include <set> using namespace std; int main() { int ...