Live2D

Solution -「LOJ #6485」 LJJ 学二项式定理

Description

  Link.

  给定 n,s,a0,a1,a2,a3,求:

i=0n(ni)siaimod4mod998244353

  多测,数据组数 105n1018,其余输入 108

Solution

  单位根反演板题。记一个函数 f 有:

f(x)=i=0n(ni)sixi=(sx+1)n

  问题即求 imod4=0,1,2,3ai[xi]f(x) 之和。以 imod4=0 为例:

i=0n[4|i]a0[xi]f(x)=14a0i=0n(j=03ω4ij)(ni)si=14a0j=03f(ω4j)

  直接代四个单位根进去算出来即可。对于其他三个 imod4 的值,将 f 的各系数位移就能类似地求出答案。

  复杂度 O(Tlogn)×42 的常数)。

Code

/* Clearink */

#include <cstdio>

#define rep( i, l, r ) for ( int i = l, repEnd##i = r; i <= repEnd##i; ++i )
#define per( i, r, l ) for ( int i = r, repEnd##i = l; i >= repEnd##i; --i )

typedef long long LL;

inline LL rint () {
	LL x = 0, f = 1; char s = getchar ();
	for ( ; s < '0' || '9' < s; s = getchar () ) f = s == '-' ? -f : f;
	for ( ; '0' <= s && s <= '9'; s = getchar () ) x = x * 10 + ( s ^ '0' );
	return x * f;
}

template<typename Tp>
inline void wint ( Tp x ) {
	if ( x < 0 ) putchar ( '-' ), x = -x;
	if ( 9 < x ) wint ( x / 10 );
	putchar ( x % 10 ^ '0' );
}

const int MOD = 998244353, G = 3, INV4 = 748683265;
LL n;
int w[4], s, a[4];

inline int mul ( const long long a, const int b ) { return a * b % MOD; }
inline int add ( int a, const int b ) { return ( a += b ) < MOD ? a : a - MOD; }
inline int mpow ( int a, int b ) {
	int ret = 1;
	for ( ; b; a = mul ( a, a ), b >>= 1 ) ret = mul ( ret, b & 1 ? a : 1 );
	return ret;
}

inline int f ( const int x ) {
	return mpow ( add ( mul ( s, x ), 1 ), n );
}

int main () {
	w[0] = 1, w[1] = mpow ( G, MOD - 1 >> 2 );
	w[2] = mul ( w[1], w[1] ), w[3] = mul ( w[2], w[1] );
	for ( int T = rint (); T--; ) {
		n = rint () % ( MOD - 1 ), s = rint ();
		rep ( i, 0, 3 ) a[i] = rint ();
		int ans = 0;
		rep ( r, 0, 3 ) {
			int res = 0;
			rep ( i, 0, 3 ) {
				res = add ( res,
					mul ( f ( w[i] ), mpow ( w[r * i & 3], MOD - 2 ) ) );
			}
			ans = add ( ans, mul ( res, a[r] ) );
		}
		wint ( mul ( ans, INV4 ) ), putchar ( '\n' );
	}
	return 0;
}
posted @   Rainybunny  阅读(100)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示