P10594 BZOJ2445 最大团 题解

news/2025/3/26 11:22:42/文章来源:https://www.cnblogs.com/Re-Star/p/18793420

题面
其实是参考了另一篇题解,但感觉那篇题解很多细节讲的不是很清楚,所以自己写了一篇题解加深印象。
题意极其抽象,所以我们根据答案反推题面,这道题的意思应该是:列出所有合法的 \(n\) 个点的图后(假设有 \(k\) 种),接着对每个图染一种颜色,求方案数。所以答案是 \(m^k\)
现在我们要求 \(k\) 可以枚举每个子图的大小 \(d\),那么将 \(n\) 个点每 \(d\) 个为一组进行分组的方案数为 \({n\choose d,d,\dots}\),但是这样我们是钦定了顺序的,而每个图内染一种颜色显然是不关心顺序的,所以每种方案都算了 \((\frac nd)!\),所以 \(k=\sum\limits_{d|n}\frac{n!}{(d!)^{\frac nd}(\frac nd)!}\)
最终答案为 \(m^{\sum\limits_{d|n}\frac{n!}{(d!)^{\frac nd}(\frac nd)!}} (\mod 10^9-401)\)
跟据费马小定理,我们实际要求 \(m^{\sum\limits_{d|n}\frac{n!}{(d!)^{\frac nd}(\frac nd)!}(\mod 10^9-402)}(\mod 10^9-401)\),关键是指数部分怎么求。首先对 \(10^9-401\) 分解质因数,\(10^9-402=2\times13\times5281\times7283\),那么我们可以先对每一个质因数算出取模后的答案再用CRT合并。
于是我们转化为解决子问题:\(\sum\limits_{d|n}\frac{n!}{(d!)^{\frac nd}(\frac nd)!}(\mod p)\),这里问题在于 \(d!\),\((\frac nd)!\) 中可能含有因子 \(p\) 无法做逆元操作,于是我们用类似exlucas的思路处理一下

\[\frac{n!}{(d!)^{\frac nd}(\frac nd)!}(\mod p)=\frac{\frac{n!}{p^i}}{(\frac{d!}{p^j})^{\frac nd}\frac{(\frac nd)!}{p^k}}\times p^{i-j\frac nd-k}(\mod p) \]

那么我们现在需要求的就是形如 \(\frac{n!}{p^x}(\mod p)\),我们首先将 \(1\)~\(n\)\(p\) 的倍数提一个 \(p\) 的因子,剩下的按模 \(p\) 的模数分组,最后有可能还会剩下几个无法分为完整的一组,即 \(n!=p^{\lfloor\frac np\rfloor}(\lfloor\frac np\rfloor)!\times(p-1)!^{\lfloor\frac np\rfloor}\times\prod\limits_{i=p\lfloor\frac np\rfloor+1}^{i<=n}i\)
到这一步我们就可以递归处理下去了。除去所以因子 \(p\) 后我们就可以求逆元了,那么这道题就做完了。

代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e9-401,N=1e4+5,p[5]={0,2,13,5281,7283},M=1e9-402;
ll qp(ll x,ll y,ll P)
{ll res=1;while(y){if(y&1) (res*=x)%=P;(x*=x)%=P,y>>=1;}return res;
}
void exgcd(ll a,ll b,ll &x,ll &y){ll t;if(!b){x=1,y=0;return;}exgcd(b,a%b,x,y);t=x,x=y,y=t-a/b*y;
}
ll inv(ll a,ll P)
{ll x,y;exgcd(a,P,x,y);return (x+P)%P;
}
ll g(ll i,ll P){return (i<P)?0:(g(i/P,P)+i/P);}
ll n,m,ans[5],fac[N],res;
ll S(ll now, ll P)
{if(now<P) return fac[now]%P;ll res=1;for(ll i=(now/P)*P+1;i<=now;i++) (res*=i)%=P;return qp(fac[P-1]%P,now/P,P)*S(now/P,P)%P*res%P;
}
ll solve(ll now,ll d,ll P)
{if(g(now,P)-(now/d)*g(d,P)-g(now/d,P)) return 0;return S(now,P)*inv(qp(S(d,P),now/d,P),P)%P*inv(S(now/d,P),P)%P;
}
inline ll rd()
{char c;ll f=1;while(!isdigit(c=getchar())) if(c=='-')f=-1;ll x=c-'0';while(isdigit(c=getchar())) x=x*10+(c^48);return x*f;
}
int main()
{fac[0]=1;for(int i=1;i<p[4];i++) fac[i]=fac[i-1]*i%M;for(int T=rd();T--;){n=rd(),m=rd(),res=0;for(int i=1;i<=4;i++){ans[i]=0;for(ll d=1;d*d<=n;d++) if(n%d==0){(ans[i]+=solve(n,d,p[i]))%=p[i];if(d*d!=n) (ans[i]+=solve(n,n/d,p[i]))%=p[i];	}}for(int i=1;i<=4;i++){ll Mi=M/p[i];(res+=ans[i]*Mi%M*inv(Mi,p[i]))%=M;}cout<<qp(m,res,mod)<<endl;}return 0; 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/906077.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20242924 2024-2025-2 《网络攻防实践》实践四报告

20242924 2024-2025-2 《网络攻防实践》实践4报告 1.实践内容 在网络攻防实验环境中完成TCP/IP协议栈重点协议的攻击实验,包括ARP缓存欺骗攻击、ICMP重定向攻击、SYN Flood攻击、TCP RST攻击、TCP会话劫持攻击。 1.1 ARP缓存欺骗攻击 ARP(Address Resolution Protocol):即地…

TCPing:用于测试禁ping设备的 TCP 连接的可达性

场景: 当设备被禁止 icmp 协议通过时,可以使用 tcp 来测试网络的连通性以及延迟TCPing tcping 是一个类似于ping 的工具,但它用于测试 TCP 连接的可达性,而不仅仅是 ICMP(传统的 ping)连接。它通过尝试与远程主机上的指定端口建立 TCP 连接,来判断目标主机的端口是否开放…

Go打包dll

1. goland 编写 代码package main/* #include <stdlib.h> */ import "C"//export Add func Add(a, b int) int {return a + b }//export Greet func Greet(v *C.char) *C.char {name := C.GoString(v)return C.CString("Hello from !" + name) } //e…

SpringSecurity5(11-跨域配置)

Spring Security跨域配置通过在WebSecurityConfigurerAdapter中自定义CorsConfiguration实现。可以配置允许的请求来源、请求方法、请求头等,以确保前端与后端之间的安全通信。结合@CrossOrigin注解或CorsFilter进行灵活配置,保障不同源的资源访问权限控制和数据安全。Spring…

AI大模型危机-多维对抗时代的网络安全与隐私困局

文章学习笔记:AI大模型危机-多维对抗时代的网络安全与隐私困局AI发展引发的安全风险与日俱增,加剧了网络安全形式的复杂性。本文剖析了大模型全生命周期安全威胁图谱,揭示数据资源枯竭、隐私泄露、监管滞后等风险问题。 AI大模型驱动网络安全风险”多维裂变“ AI大模型的发展…

CB2401是一款高性能、低功耗可完美替代RFX2401C/AT2401C

CB2401是一款高性能、低功耗的2.4GHz射频前端集成电路(RFIC),专为蓝牙、Zigbee和2.4GHz专有协议无线应用设计。该芯片可完美替代RFX2401C和AT2401C,提供更优的性能和更低的功耗。 主要技术参数核心优势 更高发射功率:+22dBm输出功率,比竞品高出2dB,通信距离更远 更低功耗:…

CH341 Linux驱动 设备驱动连接后又自动关闭

1.uname -r 查看linux版本号2.选择合适内核下的驱动 https://elixir.bootlin.com/linux/v6.8/source/drivers/usb/serial/ch341.c 3.make & make install 4.发现/dev下没有ttyUSB0设备 5.dmesg 发现问题 6043.015612] usb 1-4.2: ch341-uart converter now attached to tty…

会计学-现金流表(三)

介绍 什么是现金流量表?:就是反映你当前现金状况的一个表。 由四个部分构成:期初现金 + 本期流入现金 - 本期流出现金 = 期末现金一个企业或者一个家庭很多时候,即使是落入资不抵债的局面,也未必就会陷入破产,只要他的现金流可以一直维持日常运转,就可以不需要被迫去变卖…

会计学-资产负债表(二)

介绍 什么是资产负债表?:反映的是一家公司或者是一个家庭在某一时刻体量的表。 公式是:资产 = 负债 + 所有者权益。 资产负债表分成左右两栏,左边是资产,右边是负债和权益。 资产表示你的家底有多厚,负债和权益表示这些家底是从哪里来的。会计学上的资产负债表比较复杂的…

王炸!Kafka 4.0 重磅发布,Java 8 和 Zookeeper 彻底被抛弃了,一个时代结束了!

大家好,我是R哥。 Kafka 4.0 终于来了!这次更新可不只是常规的版本优化,而是一次重大架构调整,尤其是不再支持 Java 8,彻底移除了 Zookeeper,正式启用 KRaft 模式,让 Kafka 变得更加独立、高效。 除了这个重磅更新外,Kafka 4.0 还砍掉了一些历史包袱,还带来几个重磅新…

会计学-开篇(一)

介绍 是不是觉得会计学极其枯燥,死板,无趣?因为会计准则本身就是人为设定的游戏规则,整个学习过程感觉就是一直在背诵各种条条框框,完全没有创造性。相比之下,不管是数学,编程,物理学,生物学,投资学,都显得很有意思,这些学科都是帮助我们通向创造。而会计学似乎只会…