LOJ6485 LJJ 学二项式定理 解题报告
LJJ 学二项式定理
题意
\(T\)组数据,每组给定\(n,s,a_0,a_1,a_2,a_3\),求
\]
对\(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\)
单位根反演有个套路
\]
然后用套路推柿子
&\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 学二项式定理 解题报告的更多相关文章
- loj6485 LJJ 学二项式定理
题目描述: loj 题解: 单位根反演. $[n|x]=\frac{1}{n} \sum _{i=0}^{n-1} (ω_n^x)^i$ 证明?显然啊,要么停在$(1,0)$要么转一圈. 所以说题目要 ...
- 【LOJ#6485】LJJ 学二项式定理(单位根反演)
[LOJ#6485]LJJ 学二项式定理(单位根反演) 题面 LOJ 题解 显然对于\(a0,a1,a2,a3\)分开算答案. 这里以\(a0\)为例 \[\begin{aligned} Ans&am ...
- loj #6485. LJJ 学二项式定理 (模板qwq)
$ \color{#0066ff}{ 题目描述 }$ LJJ 学完了二项式定理,发现这太简单了,于是他将二项式定理等号右边的式子修改了一下,代入了一定的值,并算出了答案. 但人口算毕竟会失误,他请来了 ...
- 题解 LOJ-6485 【LJJ学二项式定理】
题目 由于看到正解的单位根反演过于复杂 (也就是看不懂) 所以自己构造了一个算法,理论上这个算法应该还有成长的空间(可以变得普适性更强) 不知道和单位根反演有没有一样,就发表出来了 反正转载前记得要联 ...
- loj 6485 LJJ学二项式定理 —— 单位根反演
题目:https://loj.ac/problem/6485 先把 \( a_{i mod 4} \) 处理掉,其实就是 \( \sum\limits_{i=0}^{3} a_{i} \sum\lim ...
- LOJ #6485 LJJ 学二项式定理
QwQ LOJ #6485 题意 求题面中那个算式 题解 墙上暴利 设$ f(x)=(sx+1)^n$ 假设求出了生成函数$ f$的各项系数显然可以算出答案 因为模$ 4$的缘故只要对于每个余数算出次 ...
- 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 ...
- loj#6485. LJJ 学二项式定理(单位根反演)
题面 传送门 题解 首先你要知道一个叫做单位根反演的东西 \[{1\over k}\sum_{i=0}^{k-1}\omega^{in}_k=[k|n]\] 直接用等比数列求和就可以证明了 而且在模\ ...
- loj #6485. LJJ 学二项式定理 单位根反演
新学的黑科技,感觉好nb ~ #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s". ...
随机推荐
- boost smart pointer
1. boost::scoped_ptr is a smart pointer that is the sole owner of a dynamically allocated object and ...
- Service系统服务(一):安装一个KVM服务器、KVM平台构建及简单管理、virsh基本管理操作、xml配置文件的应用、为虚拟机制作快照备份、快建新虚拟机
一.安装一个KVM服务器 目标: 本例要求准备一台 RHEL7.2 服务器,将其搭建为KVM平台,主要完成下列操作: 1> 关闭本机的SELinux保护.防火墙服务 2> 挂载RHEL ...
- form表单submit事件
form表单submit事件同时会触发form表单中button按钮的click事件 <!DOCTYPE html> <html> <head> <meta ...
- seleniumIDE command命令
语法组成要素:command.target.value. command命令 三大类型:(action.Accessor.assertion) 操作 存储 断言 操作类型——Action 浏览 ...
- Python Numpy线性代数操作
Python Numpy线性代数函数操作 1.使用dot计算矩阵乘法 import numpy as np from numpy import ones from __builtin__ import ...
- JVM系列文章合集
博客作者:纯洁的微笑 JVM系列(①):java类的加载机制 JVM系列(②):JVM内存结构 JVM系列(③):GC算法 垃圾收集器 JVM系列(④):jvm调优-命令大全(jps jstat jm ...
- java.lang
package cn.sxt; import java.lang.*; public class BooleanDemo { public static void main(Stri ...
- windows配置环境变量
windows配置环境变量 1.第一步 2.第二步 3.第三步
- zabbix cpu监控介绍
一.CPU utilization 使用Zabbix查看CPU利用率,会有下面几个值: CPU idle time:空闲的cpu时间比[简称id]CPU user time:用户态使用的cpu时间比[ ...
- element ui step组件在另一侧加时间轴显示
这是我开发的时候遇到的一个问题:项目需要在步骤条(竖直方向)的另一侧加时间显示,但是我在element ui 的step组件中一直没找着设置方法,所以就自己想了个办法加进来,效果如下: 代码如下,先上 ...