传送门

单位根反演听着高级,其实没啥技术含量……

本文是篇几乎没有证明的佛系讲解


单位根反演的式子长这样:

1n∑i=0n−1ωnik=[k∣n]\frac{1}{n}\sum_{i=0}^{n-1}\omega_n^{ik}=[k|n]n1​i=0∑n−1​ωnik​=[k∣n]

其实本质是IFFT

感觉懵的?

那直接记结论:对于一个多项式f(x)f(x)f(x),有

∑k∣i[xi]f(x)=1k∑i=0k−1f(ωix)\sum_{k|i}[x^i]f(x)=\frac{1}{k}\sum_{i=0}^{k-1}f(\omega^ix)k∣i∑​[xi]f(x)=k1​i=0∑k−1​f(ωix)

请参考下面的题解以更好地理解这个式子


d=1d=1d=1的时候直接快速幂走人

d=2d=2d=2的时候

考虑生成函数 带标号所以用EGF

得到一位群友的EGF为

f(x)=∑2∣i1i!xif(x)=\sum_{2|i}\frac{1}{i!}x^if(x)=2∣i∑​i!1​xi

也就是只有偶数项有值

可以构造出

f(x)=ex+e−x2f(x)=\frac{e^x+e^{-x}}{2}f(x)=2ex+e−x​

kkk位群友就是fk(x)f^k(x)fk(x)

强行二项式定理拆开,可以得到

12k∑i=0k(ki)[xn]ex(2i−k)\frac{1}{2^k}\sum_{i=0}^k\binom{k}{i}[x^n]e^{x(2i-k)}2k1​i=0∑k​(ik​)[xn]ex(2i−k)

对于[xn]ex(2i−k)[x^n]e^{x(2i-k)}[xn]ex(2i−k),可以考虑它的组合意义,相当于用2i−k2i-k2i−k种颜色涂nnn个格子,即(2i−k)n(2i-k)^n(2i−k)n,然后得到的是EGF,也就是除以了一个n!n!n!;最终算答案会乘上一个n!n!n!,刚好抵消。

当然很不严谨,因为有负数的情况。严谨证明可以用泰勒展开。

然后暴力枚举即可

对于d=3d=3d=3

f(x)=∑3∣i1i!xif(x)=\sum_{3|i}\frac{1}{i!}x^if(x)=3∣i∑​i!1​xi

仿照上面的栗子,考虑到1,−11,-11,−1是111的二次方根,那么现在应该用333的单位根

大胆猜想

f(x)=ex+eωx+eω2x3f(x)=\frac{e^x+e^{\omega x}+e^{\omega^2x}}{3}f(x)=3ex+eωx+eω2x​

后面就没啥区别了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#define MAXN 500005
using namespace std;
const int MOD=19491001;
inline int add(const int& x,const int& y){return x+y>=MOD? x+y-MOD:x+y;}
inline int dec(const int& x,const int& y){return x<y? x-y+MOD:x-y;}
typedef long long ll;
inline int qpow(int a,int p)
{int ans=1;while (p){if (p&1) ans=(ll)ans*a%MOD;a=(ll)a*a%MOD;p>>=1;}return ans;
}
#define inv(x) qpow(x,MOD-2)
const int w1=18827933,w2=663067;
int fac[MAXN],finv[MAXN];
inline void init(const int& N)
{fac[0]=1;for (int i=1;i<=N;i++) fac[i]=(ll)fac[i-1]*i%MOD;finv[N]=inv(fac[N]);for (int i=N-1;i>=0;i--) finv[i]=(ll)finv[i+1]*(i+1)%MOD;
}
inline int C(const int& n,const int& m){return (ll)fac[n]*finv[m]%MOD*finv[n-m]%MOD;}
int main()
{int n,k,d;scanf("%d%d%d",&n,&k,&d);init(k);if (d==1) return printf("%d\n",qpow(k,n)),0;if (d==2){int ans=0;for (int i=0;i<=k;i++) ans=add(ans,(ll)C(k,i)*qpow(dec(2*i,k),n)%MOD);ans=(ll)ans*inv(qpow(2,k))%MOD;printf("%d\n",ans);return 0;}int ans=0;for (int i=0;i<=k;i++)for (int j=0;j<=k-i;j++)ans=add(ans,(ll)C(k,i)*C(k-i,j)%MOD*qpow(add(add(i,(ll)j*w1%MOD),(ll)(k-i-j)*w2%MOD),n)%MOD);ans=(ll)ans*inv(qpow(3,k))%MOD;printf("%d\n",ans);return 0;
}

【集训队作业2018】复读机【指数型生成函数】【单位根反演】【二项式定理】相关推荐

  1. [集训队作业2018] 复读机(生成函数,单位根反演)

    传送门 subtask 1:d=1d=1d=1 答案为knk^nkn. subtask 2:n≤1000,k≤100n\leq1000,k\leq 100n≤1000,k≤100 设f[i][j]f[ ...

  2. 【UOJ#450】【集训队作业2018】复读机(生成函数,单位根反演)

    [UOJ#450][集训队作业2018]复读机(生成函数,单位根反演) 题面 UOJ 题解 似乎是\(\mbox{Anson}\)爷的题. \(d=1\)的时候,随便怎么都行,答案就是\(k^n\). ...

  3. UOJ#449. 【集训队作业2018】喂鸽子

    #449. [集训队作业2018]喂鸽子 DP好题 法一:min-max容斥 处理前m个,最快吃饱的鸽子期望的时间 根据期望的定义 考虑每个方案数的概率*期望次数 枚举前m个用了x个,概率都是(1/m ...

  4. uoj#422. 【集训队作业2018】小Z的礼物

    uoj#422. [集训队作业2018]小Z的礼物 题目描述 Solution 所有礼物全部取到的方案数并不好求,因此我们考虑min−maxmin-maxmin−max容斥,转化为第一次取到集合中某一 ...

  5. UOJ#418. 【集训队作业2018】三角形

    #418. [集训队作业2018]三角形 和三角形没有关系 只要知道儿子放置的顺序,就可以直接模拟了 记录历史最大值 用一个pair(a,b):之后加上a个,期间最大值为增加b个 合并? A1+A2= ...

  6. UOJ#450. 【集训队作业2018】复读机 排列组合 生成函数 单位根反演

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ450.html 题解 首先有一个东西叫做"单位根反演",它在 FFT 的时候用到过: ...

  7. 【集训队作业2018】复读机

    即使是一道菜题,也掩盖不了窝生成函数弱的事实. 窝看到题目只想到了DP,还是生成函数不够熟.然后直到神仙WWJ提醒我用生成函数-- 首先是排列,那就可以写成指数型生成函数的优美形式.直接表示成exp吧 ...

  8. 【集训队作业2018】喂鸽子

    我的计数还是太差了-- 这道题现在知道三种做法. 1. 直接DP 首先显然需要min-max容斥(不知道请百度),不然很难算. 显然对于大小相同的集合答案一样,问题转化为求 \(f_c\) 即 \(c ...

  9. [集训队作业2018] count(笛卡尔树,生成函数,卡特兰数)

    传送门 什么情况下两序列同构 对于两序列A[1,n],B[1,n]A[1,n],B[1,n]A[1,n],B[1,n],设fA(1,n)=pa,fB(1,n)=pbf_A(1,n)=p_a,f_B(1 ...

最新文章

  1. 大数据可视化及发展趋势
  2. python网站开发linux_使用Python编写Linux系统守护进程实例
  3. python 跳一跳辅助_python实现跳一跳辅助的实验报告
  4. java框架_2020年Java框架排行榜,谁居榜首?
  5. OpenCV学习笔记之改变图像的对比度和亮度
  6. OPenGL模板缓冲区示例程序
  7. mycat mysql 物理部署_一、MyCat的搭建
  8. 系统架构设计师-软件水平考试(高级)-理论-操作系统
  9. typecho除了首页其他大部分网页404怎么办?
  10. 【LeetCode】【HOT】297. 二叉树的序列化与反序列化(BFS)
  11. 软件测试--selenium脚本编写注意点(二)
  12. iis同时运行django和php,使用Django同时运行UWSGI和ASGI
  13. python爬取京东商品属性_python爬虫小项目:爬取京东商品信息
  14. zoj 3284 Matrix Processing(二维树状数组)
  15. MySql安装root用户密码设置失败问题解决
  16. 汇编和c语言混合的dsp程序,dsp实验三 编写一个C语言和汇编混合的DSP程序
  17. proteus常用元器件名称
  18. 微软2023届秋季校园招聘 | 内推名额等待优秀的你
  19. 三峡大学计算机与信息学院王,周欢,三峡大学 计算机与信息学院
  20. (numpy)python中Array的常用函数

热门文章

  1. 马斯克发布脑机接口重大突破:蓝牙连接,一小时植入,已获FDA认证,人体实验在即...
  2. 知乎高赞:这个开挂神器简直了!
  3. Nature封面:大团队日趋中庸,小团队更容易出颠覆性创新
  4. 看完此文再不懂区块链算我输:手把手教你用Python从零开始创建区块链
  5. java和python哪个学习编程_初学编程,选Java还是Python?
  6. python json方法详解_python详解json模块
  7. java 异步读写_Java异步与AIO
  8. bootstrap grid php,bootstrap grid用法
  9. JAVA 手撕底层arrayList代码(arrayList的简单实现)
  10. 解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!