正题

题目链接:https://www.luogu.com.cn/problem/P5591


题目大意

给出\(n,p,k\)求

\[\left(\sum_{i=0}^n\binom{n}{i}p^i\left\lfloor\frac{i}{k}\right\rfloor \right)\mod 998244353
\]

\(1\leq n,p<998244353,k=2^w(w\in[0,20])\)


解题思路

开始以为推错了,结果是要特判

推出了看上去不是我能推的式子

\[\sum_{i=1}^n\binom{n}{i}p^i\sum_{j=1}^i[k|j]
\]

然后单位根反演

\[\sum_{i=1}^n\binom{n}{i}p^i\sum_{j=1}^i\frac{1}{k}\sum_{l=0}^{k-1}\omega_k^{l\times j}
\]

系统整理一下

\[\frac{1}{k}\sum_{l=0}^{k-1}\sum_{i=1}^n\binom{n}{i}p^i\sum_{j=1}^i\omega_k^{l\times j}
\]

然后等比数列通项公式拆开

\[\frac{1}{k}\sum_{l=0}^{k-1}\sum_{i=1}^n\binom{n}{i}p^i\frac{\omega_k^l-\omega_{k}^{li}\omega^l_k}{1-\omega_k^l}
\]
\[\frac{1}{k}\sum_{l=0}^k\frac{\omega_k^l}{1-\omega_k^l}\left(\sum_{i=1}^n\binom{n}{i}p^i-\sum_{i=1}^n\binom{n}{i}p^i\omega_k^{li}\right)
\]
\[\frac{1}{k}\sum_{l=0}^k\frac{\omega_k^l}{1-\omega_k^l}\left((p+1)^n-(p\omega_k^l+1)^n\right)
\]

然后写出来会愉快的发现没有过样例,仔细看我们式子里面有一个\(\frac{\omega_k^l}{1-\omega_k^l}\)。

当 \(l=0\) 的时候\(1-\omega_k^l=0\),所以不能直接这么求,我们这个得分开考虑。

就是

\[\sum_{i=1}^n\binom{n}{i}p^ii\Rightarrow \sum_{i=1}^n\frac{n!}{(i-1)!(n-i)!}p^i
\]
\[np\sum_{i=1}^n\frac{(n-1)!}{(i-1)!(n-i)!}p^{i-1}\Rightarrow n\sum_{i=1}^n\binom{n-1}{i}p^{i-1}\Rightarrow np(p+1)^{n-1}
\]

就好了

时间复杂度\(:O(k\log P)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll P=998244353;
ll n,p,k,ans;
ll power(ll x,ll b){
ll ans=1;x%=P;
while(b){
if(b&1)ans=ans*x%P;
x=x*x%P;b>>=1;
}
return ans;
}
signed main()
{
scanf("%lld%lld%lld",&n,&p,&k);
ll d=power(3,(P-1)/k);
ans=n*p%P*power(p+1,n-1)%P;
for(ll i=1,w=d;i<k;i++,w=w*d%P){
ll inv=power(P+1-w,P-2)*w%P;
ans+=power(p+1,n)*inv%P;
ans-=power(w*p+1,n)*inv%P;
ans=(ans+P)%P;
}
printf("%lld\n",ans*power(k,P-2)%P);
return 0;
}

P5591-小猪佩奇学数学【单位根反演】的更多相关文章

  1. P5591 小猪佩奇学数学

    P5591 小猪佩奇学数学 知识点 二项式定理 \[(x+1)^n=\sum_{i=0}^n\binom nix^i \] 单位根反演 \[[n\mid k]=\frac 1n\sum_{i=0}^{ ...

  2. Luogu5591 小猪佩奇学数学 【单位根反演】

    题目链接:洛谷 \[ Ans=\frac{1}{k}(\sum_{i=0}^n\binom{n}{i}p^ii-\sum_{i=0}^n\binom{n}{i}p^i(i \ \mathrm{mod} ...

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

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

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

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

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

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

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

  7. 数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群)

    数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群) 因为不会做目录所以请善用ctrl+F 本来想的是笔记之类的,写着写着就变成了资源整理 一些有的 ...

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

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

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

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

随机推荐

  1. SpringBoot返回枚举对象中的指定属性

    枚举 package com.meeno.boot.oa.employee.enums; import com.alibaba.fastjson.annotation.JSONType; import ...

  2. 图解Win 10 应用开发之Sqlite 数据库的简单用法

    尽管目前 UWP-RT 库中还没有自带操作Sqlite数据库的API,不过,真要使用的话也不难,因为通过 Nuget ,我们其实可以获取很多支持 Sqlite 操作的第三方组件,当然了,组件虽多,但不 ...

  3. git push&pull命令详解

    git pull的作用是从一个仓库或者本地的分支拉取并且整合代码. git pull [<options>] [<repository> [<refspec>-​] ...

  4. 入门数据结构与算法,看这一个就够了,知识点+LeetCode实战演练

    本笔记来自拉钩教育300分钟搞定算法面试 算法与数据结构 要掌握一种数据结构,就必须要懂得分析它的优点和缺点. 在考虑是否应当采用一种数据结构去辅助你的算法时,请务必考虑它的优缺点,看看它的缺点是否会 ...

  5. Linux c高级

    目录 一.Linux 1.1.嵌入式 1.2.什么是Linux 1.3.Linux发行版 1.4.Linux体系结构 1.5.虚拟4G内存 1.6.shell 命令 1.7.软件包的管理 1.8.图形 ...

  6. kafka零数据丢失的配置方案

    讨论一下kafka参数的配置 1.acks 参数配置 acks这个参数有三个值:0,1,-1,但是不用的参数对应的含义不同,那如果我们想要保证数据不丢失,acks 值应该设置为哪个参数呢? 0:代表生 ...

  7. GUI容器之Frame

    Frame public class MyFrame { public static void main(String[] args) { //创建一个Frame对象 Frame frame = ne ...

  8. Python之sqlite3模块

    python自带有sqlite3模块,该模块可以方便我们操作sqlite数据库,下面一起跟随示例了解sqlite3模块的具体用法. import sqlite3 # 连接数据库 connection ...

  9. Mybatis(一)——HelloWorld

    本人的博客一向保持"傻瓜式"的风格. 循序渐进学Mybatis,先konw how,再konw why.先整体,再细节! 本文不讲难懂的概念,先通过一个案例,希望读者跟着本文一步一 ...

  10. 剑指offer(一)——二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...