problem
一个长为 \(n\) 的序列,每一个数是 \([0,k)\) 的整数。说一个数列幸运,当且仅当 \(\exists i\) 使得 \(a_i\equiv(\sum_j a_j)-a_i\pmod k\),求方案数,\(n,k\leq 10^{18}\)。
引理:若钦定数列的和为 \(s\) ,则方案数为 \(k^{n-1}\),注意 \(n=0\) 特判。
显然题目条件为:\(\sum_j a_j\equiv 2 a_i\pmod k\)
题解:https://codeforces.com/blog/entry/114392?#comment-1017709
//https://codeforces.com/contest/1808/submission/199700596
from math import gcd
n, k, p = map(int, input().split())
if k % 2: print((pow(k, n, p) - pow(k-1, n, p) + (-1) ** ((n + 1) % 2) * (gcd(n-2, k) - 1)) % p)
else: print((pow(2, p-2, p) * (pow(k, n, p) - pow(k-2, n, p)) + (-1) ** ((n + 1) % 2) * (gcd(n-2, k//2) - 1) * pow(2, n-1, p)) % p)
solution when \(k\) is odd
Let \(\sum a_i=2s\),算出有至少一个 \(s\) 的方案数:
\[\sum_{i=1}^n(-1)^{i+1}\binom{n}{i}k^{n-i-1}-\frac{(-1)^{n+1}}{k}+(-1)^{n+1}[ns\equiv 2s\pmod k].
\]
\[-\frac{1}{k}(\boxed{\sum_{i=0}^n(-1)^i\binom{n}{i}k^{n-i}}-k^n)-\frac{(-1)^{n+1}}{k}+(-1)^{n+1}[ns\equiv 2s\pmod k].
\]
\[k^{n-1}-\frac{(k-1)^n}{k}-\frac{(-1)^{n+1}}{k}+(-1)^{n+1}[ns\equiv 2s\pmod k].
\]
枚举所有的 \(s\)
\[ans=k^n-(k-1)^n+(-1)^n+(-1)^{n+1}\sum_{s=0}^{k-1}[ns\equiv 2s\pmod k].
\]
\[ans=k^n-(k-1)^n+(-1)^n-(-1)^{n}\gcd(n-2,k).
\]
solution when \(k\) is even
因为在这里 \(i\) 和 \(i+k/2\) 翻一倍是一样的,所以假如总和是 \(s\),开始容斥:
\[ans=k^{n-1}-\left(
\sum_{0\leq a+b\leq n}(-1)^{a+b}\binom{n}{a,b,n-a-b}k^{n-a-b-1}-\sum_{a+b=n}(-1)^n\binom{n}{a}k^{-1}+(-1)^n\Delta
\right)\]
\(\Delta\) 是正确的余项,我们等会再来;\(\binom{n}{a,b,n-a-b}\) 是广义组合数,表示把 \(n\) 划分为 \(a,b,n-a-b\) 三个集合的方案数,它等于 \(\frac{n!}{a!b!(n-a-b)!}\)。
化简括号内除了 \(\Delta\) 的部分:
\[\frac{1}{k}\left(\sum_{0\leq t\leq n}(-1)^tk^{n-t}\boxed{\frac{n!}{(n-t)!}}\sum_{a=0}^t\boxed{\frac{1}{a!(t-a)!}}-(-1)^n\boxed{\sum_{a=0}^n\binom{n}{a}}\right)
\]
补全两个组合数,写二项式定理:
\[=\frac{1}{k}\left(\sum_{0\leq t\leq n}(-1)^tk^{n-t}\boxed{\frac{n!}{(n-t)!t!}}\sum_{a=0}^t\boxed{\frac{t!}{a!(t-a)!}}-2^n(-1)^n\right)
\]
\[=\frac{1}{k}\left(\sum_{0\leq t\leq n}(-1)^tk^{n-t}\binom{n}{t}\boxed{\sum_{a=0}^t\binom{t}{a}}-2^n(-1)^n\right)
\]
\[=\frac{1}{k}\left(\sum_{0\leq t\leq n}(-1)^tk^{n-t}\binom{n}{t}2^t-2^n(-1)^n\right)
\]
\[=\frac{1}{k}\left(\boxed{\sum_{0\leq t\leq n}\binom{n}{t}(-2)^tk^{n-t}}-2^n(-1)^n\right)
\]
\[=\frac{(k-2)^n-(-2)^n}{k}
\]
所以答案
\[ans=k^{n-1}-\frac{(k-2)^n-(-2)^n}{k}-(-1)^n\Delta
\]
现在想一下 \(\Delta\):就是说 \(i,i+k/2\) 填满了整个序列,总和又是 \(2i\) 的方案数
\[\Delta=[2i\equiv ni\pmod k]\sum_{a\text{是偶数}}^n\binom{n}{a}+[2i\equiv ni+k/2\pmod k]\sum_{a\text{是奇数}}^n\binom{n}{a}=2^{n-1}([2i\equiv ni\pmod k]+[2i\equiv ni+k/2\pmod k])
\]
注意到若设 \(m=n-2\) 则相当于求 \([mi\equiv 0\pmod k]+[mi\equiv k/2\pmod k]\),除非 \(k=0\) 否则这两个只能成立一个,所以这相当于:
\[[mi\equiv 0\pmod{k/2}]
\]
注意到这样做连上下界都调好了
所以
\[total=\frac{k^n-(k-2)^n+(-2)^n}{2}+(-2)^{n-1}\gcd(n-2,k/2)
\]
code
点击查看代码
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
int P=1e9+7;
LL mod(LL x){return (x%P+P)%P;}
void red(LL&x){x%=P;}
LL qpow(LL a,LL b,int p=P){LL r=1;for(a%=p;b;b>>=1,a=a*a%p) if(b&1) r=r*a%p; return r;}
LL gcd(LL a,LL b){return !b?a:gcd(b,a%b);}
LL n,k;
int main(){
scanf("%lld%lld%d",&n,&k,&P);
if(n==1) return puts("1"),0;
int f=n&1?-1:1;
if(k&1) printf("%lld\n",mod(qpow(k,n,P)-qpow(k-1,n,P)+f-f*gcd(n-2,k)));
else printf("%lld\n",mod(qpow(2,P-2,P)*(qpow(k,n,P)-qpow(k-2,n,P)+qpow(-2,n,P))+qpow(-2,n-1)*gcd(n-2,k/2)));
return 0;
}
回顾与反思
二项式定理
\[\sum_{i=0}^n\binom{n}{i}a^ib^{n-i}=(a+b)^n.
\]
\[\Rightarrow\sum_{i=0}^n\binom{n}{i}(-1)^ik^{n-i}=(k-1)^n.
\]
\[\Rightarrow\sum_{a=0}^t\binom{t}{a}=2^n.
\]
\[\Rightarrow\sum_{a 是奇数}^t\binom{t}{a}=\sum_{a 是偶数}^t\binom{t}{a}=2^{n-1}.
\]
组合数
\[\binom{n}{m}=\frac{n!}{m!(n-m)!}
\]
\[\Rightarrow \binom{n}{a,b,n-a-b}=\binom{n}{a}\binom{n-a}{b}\binom{n-a-b}{n-a-b}=\frac{n!}{a!b!(n-a-b)!}
\]
数论
关于 \(i\) 的同余方程,\(mi\equiv 0\pmod k\) 在 \([0,k)\) 内有 \(\gcd(m,k)\) 个解。
证明:\(\Rightarrow \frac{m}{d}i\equiv0\pmod{k/d}\)(\(d=\gcd(m,k)\)),此时等式两边同时乘上 \(\frac{m}{d}\) 的乘法逆元,得到了原方程的所有解是 \(i\equiv 0\pmod{k/d}\)。
所以一共有 \(\frac{k}{k/d}=\gcd(m,k)\) 个解,且都是 \(\frac{k}{\gcd(m,k)}\) 的倍数。
错误做法,容斥系数挂了
solution when \(k\) is odd
这时 \(i\to 2i\) 形成一个双射。设和为 \(2i\) 则我们需要有 \(i\) 这个数在里面。
\[\sum_{i=0}\binom{n}{i}(-1)^i k^{n-i-1}
\]
注意致命边界,应为
\[\frac{1}{k}\sum_{i=0}^{n}\binom{n}{i}(-1)^i k^{n-i}-\frac{(-1)^n}{k}+(-1)^n
=\frac{(k-1)^n}{k}-\frac{(-1)^n}{k}+(-1)^n\]
最后枚举所有的 \(i\)
\[=(k-1)^n-(-1)^n+k(-1)^n=(k-1)^n+(k-1)(-1)^n
\]
solution when \(k\) is even
\(i,i+k/2\to 2i\)
枚举有多少个 \(i,i+k/2\)
\[\sum_a\sum_b(-1)^{a+b}\binom{n}{a,b,n-a-b}k^{n-a-b-1}
\]
\[=\sum_t\frac{(-1)^t}{(n-t)!}k^{n-t-1}\sum_{a\leq t}\frac{n!}{a!(t-a)!}
\]
\[=\sum_t(-1)^t\frac{n!}{(n-t)!t!}k^{n-t-1}\sum_{a\leq t}\frac{t!}{a!(t-a)!}
\]
\[=\sum_t(-1)^t\binom{n}{t}k^{n-t-1}\sum_{a\leq t}\binom{t}{a}
\]
\[=\frac{1}{k}\sum_t(-1)^t\binom{n}{t}k^{n-t}2^t
\]
\[=\frac{1}{k}\sum_t\binom{n}{t}(-2)^tk^{n-t}=\frac{1}{k}(k-2)^n
\]
考虑误差项
\[\Delta=-k^{-1}\sum_{a+b=n}(-1)^n\binom{n}{a}+\sum_{a+b=n,a是偶数}(-1)^n\binom{n}{a}
\]
\[=-k^{-1}(-1)^n\sum_{a+b=n}\binom{n}{a}+(-1)^n\sum_{a+b=n,a是偶数}\binom{n}{a}
\]
\[=-k^{-1}(-1)^n2^n+(-1)^n2^{n-1}
\]
对着以上的东西乘 \(k/2\)。