如果写过 LJJ 学二项式那道题的话这道题就不难了. #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout) using namespace std; int K,bu[10000],G; ll Mod,N; struct M { ll a…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3328 单位根反演主要就是有 \( [k|n] = \frac{1}{k}\sum\limits_{i=0}^{k-1}w_{k}^{i*n} \) 如果 k | n ,转 n 下就会是 1 :不然用等比数列求和公式可知是 0 . 一般是构造一个 \( f(x) = ( 1+x )^n \) 之类的,来求含有组合数的式子.比如 \( \sum\limits_{i=0}^{n}C_{n}^{i…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3328 单位根反演,主要用到了 \( [k|n] = \frac{1}{k} \sum\limits_{i=0}{k-1} w_{k}^{in} \)推导见:https://www.cnblogs.com/galaxies/p/bzoj3328.html构造 \( F(x) \) 是为了凑成二项式定理的形式,其实也不难想:又忘记在定义构造函数时写 N 了!把 =N(...) 写成 =(...…
BZOJ 3328: PYXFIB 题意 给定\(n,p,k(1\le n\le 10^{18},1\le k\le 20000,1\le p\le 10^9,p \ is \ prime,k|(p-1))\),求 \[ \sum_{i=0}^{\lfloor\frac{n}{k}\rfloor}\binom{n}{ik}F_{ik} \] 其中\(F_{i}\)代表斐波那契数列的第\(i\)项. 首先分析一波题目条件,有个很奇怪的条件\(k|\varphi(p)\) 如果对NTT或者单位根有所…
题面 传送门 题解 我们设\(A=\begin{bmatrix}1 & 1 \\ 1 & 0\end{bmatrix}\),那么\(A^n\)的左上角就是\(F\)的第\(n\)项 所以我们现在转化为求 \[\sum_{i=0}^n[k|i]{n\choose i}A^i\] 把\([k|i]\)单位根反演一下 \[ \begin{aligned} ans &=\sum_{i=0}^n[k|i]{n\choose i}A^i\\ &={1\over k}\sum_{i=0}…
题意:求 \[ \sum_{i=0}^n[k|i]\binom{n}{i}Fib(i) \] 斐波那契数列有简单的矩阵上的通项公式\(Fib(n)=A^n_{1,1}\).代入得 \[ =\sum_{i=0}^n[k|i]\binom{n}{i}A^i_{1,1} \] 由单位根反演, \[ =\sum_{i=0}^n\frac{1}{k}\sum_{j=0}^{k-1}w_k^{ij}\binom{n}{i}A^i_{1,1} \] 注意到后面多项与\(i\)有关,考虑将\(i\)贬到后面去.…
3328: PYXFIB Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 130  Solved: 41[Submit][Status][Discuss] Description Input 第一行一个正整数,表示数据组数据 ,接下来T行 每行三个正整数N,K,P Output T行,每行输出一个整数,表示结果 Sample Input 1 1 2 3 Sample Output 1 HINT Source 思路与莫比乌斯反演相似,通过二项式巧妙地…
可以发现,如果没有鳄鱼,那么就是裸地一道题,但是可以发现鳄鱼最多每12次重复,那么就少于12的那部分dp,其他的就矩阵乘法就行了 PS:第一次吧矩阵乘法AC了好开心QAQ CODE: #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #define mod 10000 #define maxn 60 using namespace std; struct mat…
1<<i的结果需要是long long的话i是long long是没用的--要写成1ll<<i--我别是个傻子吧 虽然写的是二进制贪心,但是我觉得二分可能更好写吧(但是会慢) 首先把矩阵乘法转换成Floyd的形式,注意是进行一次更新,也就是另开一个数组使得更新之后每个[i][j]都变成经过一或两段路,(i,j)之间的最长路 然后就可以倍增了,一直相乘就会变成经过一二四六八-段路,(i,j)之间的最长路,这里把倍增过程记下来 直到某次相乘之后符合要求(也就是[1][x]的最长路大于等…
标题效果:特定n,乞讨[1,n]内[1,2^n]差多少x满足x^3x=2x x^3x=2x相当于x^2x = 3x 和3x=x+2x 和2x=x<<1 因此x满足条件IFFx&(x<<1)=0 故x的二进制拆分中随意两个1不相邻 令f[i]为i位数中最高位为0的满足条件的数的数量 g[i]为i位数中最高位为1的满足条件的数的数量 则显然有 f[i+1]=f[i]+g[i] g[i+1]=f[i] 于是第一问数位DP 第二问矩阵乘法就可以 #include <cstdi…