首页 > 编程语言 >题解 E. NTT 集美大学第九届程序设计竞赛

题解 E. NTT 集美大学第九届程序设计竞赛

时间:2022-10-26 23:01:29浏览次数:73  
标签:begin cdot 题解 over NTT int Bmatrix sum 集美

传送门

现场没推出了,找了个规律,发现是 \((n+1)^{n-1}\) 就直接冲过了


【分析】

考虑 \(0\leq k<n\) ,所以 \(\min(k, n-1)=k\)

因此有:
\(\begin{aligned} &\sum_{i=k}^{\min(k, n-1)+n-1}{\text{lcm}(i-k+1, n)\over k+1} \\=&\sum_{i=1}^n {\text{lcm}(i, n)\over k+1} \\=&{1\over k+1}\sum_{i=1}^n{in\over \gcd(i, n)} \\=&{1\over k+1}\cdot n\cdot\sum_{g\mid n}{1\over g}\sum_{i=1}^n[\gcd(i, n)=g]i \\=&{n\over k+1}\cdot \sum_{g\mid n}\sum_{i=1}^{n\over g}[\gcd(i, {n\over g})=1]i \end{aligned} \)
而其中,不超过 \(x\) 的与 \(x\) 互质的数和,是经典题目,有:
\(\begin{aligned} s(m)&=&\sum_{i=1}^m [\gcd(i, m)=1]i \\&=&\sum_{d\mid m}\boldsymbol \mu(d)\sum_{i=1}^m[d\mid i]i \\&=&\sum_{d\mid m}\boldsymbol \mu(d)\cdot d\cdot {{m\over d}\cdot ({m\over d}+1)\over 2} \\&=&{m\over 2}(\sum_{d\mid m}\boldsymbol \mu(d)\cdot {m\over d}+\sum_{d\mid m}\boldsymbol \mu(d)) \\&=&{m\over 2}\cdot (\boldsymbol \varphi(m)+[m=1]) \end{aligned} \)
于是给定式子化简为 \(\displaystyle {1\over k+1}\cdot n\cdot \sum_{g\mid n} s(g)\) 。除了 \(\displaystyle {1\over k+1}\) 显然可以通过枚举倍数的方法,在 \(\displaystyle O(\sum_{i=1}^n{n\over i})=O(n\log n)\) 的时间内预处理


剩余的部分考虑组合意义:

\(n\) 种字符中,有 \(k\) 个从未使用,构成长度为 \(n\) 的字符串方案数

等价于从 \(n\) 个互不相同的盒子中选择 \(n-k\) 个,然后将 \(n\) 个小球放入这 \(n-k\) 个互不相同的盒子,要求每个选定的盒子非空,问方案数

考虑第二类斯特林数的组合意义,不难写出公式 \(\displaystyle \dbinom {n} {n-k}\cdot \begin{Bmatrix}n\\n-k\end{Bmatrix}\cdot (n-k)!\)

于是答案为:
\(\begin{aligned} &\sum_{k=0}^{n-1}\dbinom {n} {n-k}\cdot \begin{Bmatrix}n\\n-k\end{Bmatrix}\cdot (n-k)!\cdot {1\over k+1}\cdot n\cdot \sum_{g\mid n}s(g) \\=&(\sum_{k=1}^n\dbinom {n} {k}\cdot \begin{Bmatrix}n\\k\end{Bmatrix}\cdot k!\cdot {1\over n-k+1})\cdot (n\cdot \sum_{g\mid n}s(g)) \\=&(\sum_{k=0}^{n-1}{n!\over (n-k)!}\cdot \begin{Bmatrix}n\\k+1\end{Bmatrix})\cdot (n\cdot \sum_{g\mid n}s(g)) \end{aligned} \)
考虑第二类斯特林数和下降幂的关系有:
\(\begin{aligned} &\sum_{k=0}^{n-1}{n!\over (n-k)!}\cdot \begin{Bmatrix}n\\k+1\end{Bmatrix} \\=&{1\over n+1}\sum_{k=1}^{n}\begin{Bmatrix}n\\k\end{Bmatrix}(n+1)^{\underline k} \\=&{1\over n+1}\cdot [(n+1)^n-\begin{Bmatrix}n\\0\end{Bmatrix}] \\=&(n+1)^{n-1}&(n>0) \end{aligned}\)

于是直接冲就完事了


【代码】

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int P=998244353;
inline int kpow(int a, int x, int p=P) { int ans=1; for(; x; x>>=1, a=(ll)a*a%p) if(x&1) ans=(ll)ans*a%p; return ans; }
inline int inv(int a, int p=P) { return kpow(a, p-2, p); }
const int Lim=1e6, MAXN=Lim+10;
int n, phi[MAXN], f[MAXN];
int prime[MAXN], cntprime, fc[MAXN];
inline void init() {
	phi[1]=1;
	for(int i=2; i<=Lim; ++i) {
		if(!fc[i]) fc[i]=prime[++cntprime]=i, phi[i]=i-1;
		for(int j=1; j<=cntprime; ++j)
			if(prime[j]>fc[i]||prime[j]*i>Lim) break;
			else {
				fc[prime[j]*i]=prime[j];
				phi[prime[j]*i]=(fc[i]==prime[j]?prime[j]:prime[j]-1)*phi[i];
			}
	}
	
	for(int i=1; i<=Lim; ++i) {
		int s=(i==1?1:(ll)i*phi[i]/2%P);
		for(int j=i; j<=Lim; j+=i)
			f[j]=(f[j]+s)%P;
	}
	for(int i=1; i<=Lim; ++i) f[i]=(ll)i*f[i]%P;
}
inline int ans() {
	cin>>n;
	return (ll)f[n]*kpow(n+1, n-1)%P;
}
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	init();
	int T;
	cin>>T;
	while(T--)
		cout<<ans()<<"\n";
	return 0;
}

标签:begin,cdot,题解,over,NTT,int,Bmatrix,sum,集美
From: https://www.cnblogs.com/JustinRochester/p/16830498.html

相关文章

  • 洛谷P1021题解
    原题P1021[NOIP1999提高组]邮票面值设计思路概述题意分析给定两个整数\(N,K(N+K≤15)\),设计\(K\)种邮票面值\(\{a_1,a_2\dotsa_K\}\),并用共\(N\)张上述邮票......
  • 洛谷P1064题解
    原题P1064[NOIP2006提高组]金明的预算方案思路概述题意分析给定一个体积为\(n\)的背包和\(m\)个物品。每个物品通过\((\text{价值},\text{体积})\)的形式表......
  • CF Round #829 题解 (Div. 2)
    F没看所以摆了.看拜月教教主LHQ在群里代打恰钱/bx目录A.TechnicalSupport(*800)B.KevinandPermutation(*800)C.MakeNonzeroSum(C1*1300,C2*1500)D.F......
  • Error: Cannot find module 'gifsicle'问题解决
    运行报错 Error:Cannotfindmodule'gifsicle'解决办法:删除nodu_modules下的image-webpack-loader包npmuninstallimage-webpack-loader重新安装npminstall......
  • CF 464C Substitutes in Number 题解
    前置知识:\((a+b)\equiv(a\bmodp+b\bmodp)\pmod{p}\)。同余定理使用后不能再修改数字。那么为了能用这个公式,我们倒序处理每个数字。定义\(d_i\)为\(10\)的位数\(......
  • 2022/10/26 考试题解
    又被抓摆了/kkT4(T3?)CactustoTreelinkSolutiontmd,连tm\(\Theta(n^2)\)都没有看出来!!!!!!/fn考虑\(\Theta(n^2)\)怎么做,其实就是对于每一个点直接BFS(似乎对正解也没有......
  • CSPS2019 括号树 题解
    链的部分分我们设f[i]表示以i结尾的括号序列有多少个,那么i的实际答案就是f的前缀和显然,所有左括号和不能匹配的右括号的f均为0对于每一个能匹配的右括号i,我们找到与之......
  • EasyCVR数据库优化:ehome设备表不能同步更新的问题解决
    EasyCVR视频融合云平台可支持多协议、多设备接入,包括国标GB28181、RTMP、RTSP/Onvif、海康SDK、大华SDK、Ehome等协议,同时也能分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视......
  • P7911 网络连接评论及c++题解
    P7911网络连接1.原题链接root2.评论下位黄的水平前置知识:sscanf()函数,sprintf()函数,map<>当然,不会sscanf()和sprintf()也有解法,详见解法13.解法解法1#inclu......
  • arc138C 题解
    挺喜欢这道题,可惜大号已经红了,又不想要估值,只能用小号交。A与B在玩游戏,其中A先手。有\(n\)个数\(a_1-a_n\),A每次可以任意取一个数,B每次会取没有被取的数......