当前位置: 首页 > news >正文

摆(行列式、杜教筛)

有一个 n × n n\times n n×n 的矩阵 A A A,满足:
A i , j = { 1 i = j 0 i ≠ j ∧ i ∣ j C otherwise A_{i,j}=\begin{cases} 1 &i=j\\ 0 &i\not=j\land i\mid j\\ C &\text{otherwise} \end{cases} Ai,j= 10Ci=ji=jijotherwise

det ⁡ ( A ) \det(A) det(A)。答案模 998244353 998244353 998244353

n ≤ 1 0 11 n\le10^{11} n1011


显然当 C = 0 C=0 C=0 时答案为 1 1 1,当 C = 1 C=1 C=1 时若 n ≤ 2 n\le2 n2 则答案为 1 1 1 否则为 0 0 0

首先 A A A 形如:
[ 1 0 0 0 0 … C 1 C 0 C … C C 1 C C … C C C 1 C … C C C C 1 … ⋮ ⋮ ⋮ ⋮ ⋮ ⋱ ] \begin{bmatrix} 1&0&0&0&0&\dots\\ C&1&C&0&C&\dots\\ C&C&1&C&C&\dots\\ C&C&C&1&C&\dots\\ C&C&C&C&1&\dots\\ \vdots&\vdots&\vdots&\vdots&\vdots&\ddots \end{bmatrix} 1CCCC01CCC0C1CC00C1C0CCC1

考虑把主对角线的 1 1 1 换位 C + x C+x C+x,这样 det ⁡ ( A ) \det(A) det(A) 就可看做关于 x x x 的多项式,求值只需代入 x = 1 − C x=1-C x=1C 即可。

这里有个式子

det ⁡ ( A ) = ∑ S ⊂ { 1 , 2 , … , n } det ⁡ ( B S ) ⋅ x n − ∣ S ∣ \det(A)=\sum\limits_{S\subset\{1,2,\dots,n\}}\det(B_S)\cdot x^{n-|S|} det(A)=S{1,2,,n}det(BS)xnS

其中 B S B_S BS 表示把矩阵 A A A 主对角线元素换成 C C C,只选出行列都在 S S S 中的元素拼接形成的矩阵。

例如: B { 1 , 2 , 4 , 5 , 8 } = [ C 0 0 0 0 C C 0 C 0 C C C C 0 C C C C C C C C C C ] B_{\{1,2,4,5,8\}}=\begin{bmatrix} C&0&0&0&0\\ C&C&0&C&0\\ C&C&C&C&0\\ C&C&C&C&C\\ C&C&C&C&C\\ \end{bmatrix} B{1,2,4,5,8}= CCCCC0CCCC00CCC0CCCC000CC

证明考虑感性理解。设 i = n − ∣ S ∣ i=n-|S| i=nS,对于 x i x^{i} xi 的系数,考虑行列式的定义,要选出行列都互不相同的 n n n 个数相乘,由于只有主对角线上的 C + x C+x C+x 有次数贡献,于是考虑选出来 m m m 个主对角线上的元素( m ≥ i m\ge i mi),剩下的行列拼接在一起后面选。我们此时发现 n − m + m − i = n − i n-m+m-i=n-i nm+mi=ni,说明 B S B_S BS 是由 S S S 的行列与 m m m 行列之中选 m − i m-i mi 个组成的, ( C + x ) m (C+x)^m (C+x)m x i x^i xi 的系数为 ( m i ) C m − i \binom{m}{i}C^{m-i} (im)Cmi,恰好满足条件。

我们观察 B S B_S BS,发现如果 S S S 中元素两两整除,那么 B S B_S BS 是下三角矩阵, det ⁡ ( B S ) = C ∣ S ∣ \det(B_S)=C^{|S|} det(BS)=CS。否则可以证明 det ⁡ ( B S ) = 0 \det(B_S)=0 det(BS)=0

考虑归纳法证明,如果 S S S 中存在两个数不为 S S S 中其他任何数的因子,那么矩阵中就会出现两行 C C C det ⁡ ( B S ) = 0 \det(B_S)=0 det(BS)=0;否则 S S S 中最大的数一定是其他数的倍数,从而只有最后一行全为 C C C,不妨删去最后一行列。这样递归下去,容易发现结论成立。

r = C 1 − C r=\frac{C}{1-C} r=1CC,于是 det ⁡ ( A ) = ( 1 − C ) n ∑ S 中元素两两整除 r ∣ S ∣ \det(A)=(1-C)^n\sum\limits_{S中元素两两整除} r^{|S|} det(A)=(1C)nS中元素两两整除rS

f i f_i fi 表示所有满足 S S S 中最大元素为 i i i r ∣ S ∣ r^{|S|} rS 之和(特别地, f 1 = 1 + r f_1=1+r f1=1+r)。容易得到转移式子
f i = r ∑ j ∣ i , j < i f j f_i=r\sum\limits_{j\mid i,j<i}f_j fi=rji,j<ifj

s ( i ) = ∑ j = 1 i f j s(i)=\sum\limits_{j=1}^if_j s(i)=j=1ifj,我们要求出 s ( n ) s(n) s(n)

考虑杜教筛,我们构造 g ( n ) = { − 1 n = 1 r n > 1 g(n)=\begin{cases}-1&n=1\\r&n>1\end{cases} g(n)={1rn=1n>1,函数 h = f ∗ g h=f*g h=fg,容易验证 h ( n ) = { − r − 1 n = 1 0 n > 1 h(n)=\begin{cases}-r-1&n=1\\0&n>1\end{cases} h(n)={r10n=1n>1。套用公式 g ( 1 ) s ( n ) = ∑ i = 1 n h i − ∑ i = 2 n g ( i ) s ( ⌊ n i ⌋ ) g(1)s(n)=\sum\limits_{i=1}^nh_i-\sum\limits_{i=2}^ng(i)s(\lfloor\frac ni\rfloor) g(1)s(n)=i=1nhii=2ng(i)s(⌊in⌋),可以得到 s ( n ) s(n) s(n) 的转移式子
s ( n ) = 1 + r + r ∑ i = 2 n s ( ⌊ n i ⌋ ) s(n)=1+r+r\sum\limits_{i=2}^ns(\lfloor\frac ni\rfloor) s(n)=1+r+ri=2ns(⌊in⌋)

到此直接按式子求答案是 O ( n 3 4 ) O(n^{\frac34}) O(n43) 的,如果预处理出前 n 2 3 n^{\frac23} n32 s ( n ) s(n) s(n),求值可以做到 O ( n 2 3 ) O(n^{\frac23}) O(n32)

但是预处理时间复杂度容易带上 log ⁡ \log log,所以要考虑优化。

n = ∏ p i k i n=\prod p_i^{k_i} n=piki,如果我们把 p 1 , p 2 , … p_1,p_2,\dots p1,p2, 依次换成 2 , 3 , 5 , 7 , … 2,3,5,7,\dots 2,3,5,7,,所得到的数设为 n ′ n' n,容易发现 f n = f n ′ f_n=f_{n'} fn=fn。这启发我们 f n f_n fn 的值只与可重集 k k k 有关。通过暴力发现可重集的数量很少,于是我们可以暴力求出这些“代表”的函数值,然后让找到其他数所对应的“代表”。用欧拉筛实现,具体实现可参照代码。

总的时间复杂度为 O ( n 2 3 ) O(n^{\frac23}) O(n32)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=998244353,N=2e7+1;
ll n,c,R;
int a[N],p[N],cnt,m,to[N],num[N],Max[N];
ll S[N];
unordered_map<ll,int> ma;
ll ksm(ll a,ll b)
{ll ans=1;while(b){if(b&1) ans=ans*a%mod;b>>=1;a=a*a%mod;}return ans;
}
ll s(ll n)
{if(n<=m) return S[n];if(ma.count(n)) return ma[n];ll ans=1+R;for(ll i=2,r;i<=n;i=r+1){r=n/(n/i);ans=(ans+(r-i+1)%mod*R%mod*s(n/i))%mod;}return ma[n]=ans;
}
void init(int n)
{a[1]=1,to[1]=S[1]=1+R;for(int i=2;i<=n;i++){if(!a[i]){p[++cnt]=i;to[i]=2;num[i]=1;Max[i]=i;}if(to[i]==i){for(int j=1;j*j<=i;j++) if(i%j==0) S[i]=(S[i]+S[j]+(j*j<i&&j>1)*S[i/j])%mod;S[i]=S[i]*R%mod;}else S[i]=S[to[i]];for(int j=1;j<=cnt&&i*p[j]<=n;j++){int x=i*p[j];a[x]=1;Max[x]=Max[i];if(i%p[j]==0){num[x]=num[i];to[x]=to[x/Max[x]]*p[num[x]];break;}num[x]=num[i]+1;to[x]=to[x/Max[x]]*p[num[x]];}}for(int i=2;i<=n;i++) S[i]=(S[i]+S[i-1])%mod;
}
int main()
{freopen("bigben.in","r",stdin);freopen("bigben.out","w",stdout);cin>>n>>c;if(!c) cout<<1,exit(0);if(c==1) cout<<(n<=2),exit(0);R=c*ksm(1-c+mod,mod-2)%mod;init(m=min(n,N-1));cout<<s(n)*ksm(1-c+mod,n)%mod;
}

相关文章:

摆(行列式、杜教筛)

有一个 n n n\times n nn 的矩阵 A A A&#xff0c;满足&#xff1a; A i , j { 1 i j 0 i ̸ j ∧ i ∣ j C otherwise A_{i,j}\begin{cases} 1 &ij\\ 0 &i\notj\land i\mid j\\ C &\text{otherwise} \end{cases} Ai,j​⎩ ⎨ ⎧​10C​ijij∧i∣jotherwi…...

尝试以语法对照表格形式学习新语言:c,rust

以语法对照表格形式学习新语言&#xff0c;以rust为例。 关于rust的个人看法&#xff1a; 能否替代c&#xff1f;部分场景可以&#xff0c;长远看并不会。如果c再扩一些关键字&#xff0c;类似cpp的吸星大法式扩充&#xff0c;rust并不具备优势。解决了c的内存管理问题&#x…...

408计算机网络--基础概论

学习计算机网络走以前需要首先明白一个大的概念&#xff0c;计算机网络通常分为通信子网&#xff08;实现数据通信&#xff09;和资源子网&#xff08;实现资源共享/数据处理&#xff09;七层妖塔 计算机网络&#xff1a;是一个将分散的、具有独立功能的计算机系统&#xff0…...

数据库应用:kylin 部署 达梦数据库DM8

目录 一、实验 1.环境 2.部署前规划 3.部署达梦数据库DM8 4.创建数据库及数据库事例管理 5.达梦数据库的基本操作 二、问题 1.xhost命令报错 2.执行安装程序DMInstall.bin 报错 3.解压安装程序报错 4.安装程序找不到文件 5.图像化界面打不开 6.安装内存太小 7.打开…...

GO框架基础 (二)、sqlx库

在 Go 语言中&#xff0c;sqlx 包是一个用于数据库操作的库&#xff0c;它建立在标准库的 database/sql 包之上&#xff0c;并提供了一些额外的功能&#xff0c;以简化和增强与数据库的交互。sqlx 的目标是通过提供更方便的 API 和一些附加功能来改善在 Go 中进行 SQL 数据库查…...

Expected class selector “.menuChildMall“ to be kebab-case报错原因

![在这里插入图片描述](https://img-blog.csdnimg.cn/dire ct/6b72bda760a2497a90558d48bd0a4de3.png) 使用stylelint格式化css文件时候报上述错误&#xff1a; 原因&#xff1a; css类名未使用-分隔符 将类名修改为&#xff1a; .menu-child-mall形式即可...

NC文件不规则裁剪(利用shp文件裁剪)(三)

文章目录 前言实例数据代码部分需要的库加载文件写入地理信息裁剪NC结果 完整代码奉上 前言 Hello大家好呀&#xff0c;最近正好需要用到多个SHP去裁剪NC&#xff0c;按照我以前的两种办法&#xff08;办法1和办法2&#xff09;操作的话&#xff0c;我自己都会破防&#xff0c…...

java 宠物在线商城系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java 宠物在线商城系统是一套完善的java web信息管理系统 servletdaobean mvc模式&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&…...

三防平板丨手持工业平板丨ONERugged工业三防平板丨推动数字化转型

随着科技的发展&#xff0c;数字化转型已经成为企业转型升级的必由之路。而在数字化转型中&#xff0c;三防平板作为一种重要的工具&#xff0c;可以极大地推动企业的数字化转型。本文将从以下几个方面探讨三防平板如何推动数字化转型。 一、提高工作效率 ONERugged加固平板的…...

【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)

阅读导航 引言一、生产者消费者模型二、环形队列简介三、基于环形队列的生产者消费者模型&#xff08;C 代码模拟实现&#xff09;⭕Makefile文件⭕ . h 头文件✅sem.hpp✅ringQueue.hpp ⭕ . cpp 文件✅testMain.cpp 温馨提示 引言 在上一篇文章中&#xff0c;我们深入探讨了…...

【Docker】Docker存储卷

文章目录 一、什么是存储卷二、为什么需要存储卷三、存储卷分类四、管理卷Volume创建卷方式一&#xff1a;Volume 命令操作方式二&#xff1a;-v 或者--mount 指定方式三&#xff1a;Dockerfile 匿名卷 操作案例Docker 命令创建管理卷Docker -v 创建管理卷Docker mount 创建管理…...

基于python的租车管理平台/汽车租赁网站

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括&#xff1a;首页、详情页、用户中心、家政入驻模块。后台功能包括&#xff1a;总览、车辆管理、分类管理…...

【JVM】双亲委派机制

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;JVM ⛺️稳中求进&#xff0c;晒太阳 双亲委派机制 在Java中如何使用代码的方式去主动加载一个类呢&#xff1f; 方式1&#xff1a;使用Class.forName方法&#xff0c;使用当前类的类加载…...

分布式id实战

目录 常用方式 特征 潜在问题 信息安全 高性能 UUID 雪花算法 数据库生成 美团Leaf方案 Leaf-segment 数据库方案 Leaf-snowflake 方案 常用方式 uuid雪花算法数据库主键 特征 全局唯一趋势递增信息安全 潜在问题 信息安全 如果id连续递增, 容易被爬虫, 批量下…...

深入了解 SOCKS5 代理、代理 IP 和 HTTP

在网络通信和数据传输中&#xff0c;代理服务器扮演着至关重要的角色。本文将深入探讨 SOCKS5 代理、代理 IP 和 HTTP&#xff0c;揭示它们的工作原理、应用场景以及优缺点。 1. SOCKS5 代理 SOCKS&#xff08;Socket Secure&#xff09;是一种网络协议&#xff0c;允许客户端…...

外包干了3个多月,技术退步明显。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...

Unity之闪电侠大战蓝毒兽(简陋的战斗系统)

目录 &#x1f3a8;一、创建地形 &#x1f3ae;二、创建角色 &#x1f3c3;2.1 动画 &#x1f3c3;2.2 拖尾 &#x1f3c3;2.3 角色控制 ​&#x1f3c3;2.4 技能释放 &#x1f3c3;2.5 准星 &#x1f4f1;三、创建敌人 &#x1f432;3.1 选择模型 &#x1f432;3.…...

C# 菜鸟级别有关于redis的使用

public IActionResult Index() { ConnectionMultiplexer _conn ConnectionMultiplexer.Connect("127.0.0.1:6379");//初始化 var database _conn.GetDatabase(7);//指定连接的库 0 RedisHelper redisHelper new Redi…...

AlexNet的出现推动深度学习的巨大发展

尽管AlexNet&#xff08;2012&#xff09;的代码只比LeNet&#xff08;1998&#xff09;多出几行&#xff0c;但学术界花了很多年才接受深度学习这一概念&#xff0c;并应用其出色的实验结果。 AlexNet&#xff08;由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton共同设计…...

2024面试offer收割宝典字节篇

1.IO 模型有哪些,讲讲你理解的 nio ,他和 bio,aio 的区别是啥, 谈谈 reactor 模型。 IO 模型主要包括以下几种:1. 阻塞 I/O (BIO): 当一个线程调用 read() 或 write() 系统调用时,如果数据没有准备好或者缓冲区已满,则该线程会被操作系统阻塞,直到有数据可读或写入完…...

冒泡排序及其优化

冒泡排序 int[] arr {1,3,2,9,4,7,2,8};//比较多少轮(n个数字比较n-1次)for(int i0,n arr.length;i<n-1;i) {//每轮比较多少次(n-1-i次)for(int j 0;j<n-1-i;j) {//两两比较if(arr[j] > arr[j1]) { //比较结果为升序排列&#xff0c;如果想要降序排列结果将 >…...

【医学大模型 补全主诉】BioGPT + LSTM 自动补全医院紧急部门主诉

BioGPT LSTM 自动补全医院紧急部门主诉 问题&#xff1a;针对在紧急部门中自动补全主诉的问题子问题1: 提高主诉记录的准确性子问题2: 加快主诉记录的速度子问题3: 统一医疗术语的使用子问题4: 减少打字错误和误解子问题5: 提高非特定主诉的处理能力 解法数据预处理神经网络方…...

HCIE-Datacom证书有效期多久?HCIE考试有哪些内容?

如今越来越多的人开始关注并参与到华为认证的学习中来。 其中&#xff0c;华为认证数据通信专家(HCIE-Datacom)作为华为认证体系中的高级认证&#xff0c;备受瞩目。 那么&#xff0c;关于HCIE-Datacom证书的有效期以及HCIE考试的内容&#xff0c;你知道多少呢&#xff1f;下…...

OpenCV中的边缘检测技术及实现

边缘检测是在电脑如何理解图片这一问题中的一环&#xff0c;它帮助电脑找出照片里的轮廓和分界线。想象一下你在看一幅黑白漫画&#xff0c;轮廓线定义了每一个角色和物体&#xff0c;而电脑要做的&#xff0c;就是通过边缘检测来找出这些线条。这在很多像是图像分析这样的领域…...

机器学习基础(一)理解机器学习的本质

导读&#xff1a;在本文中&#xff0c;将深入探索机器学习的根本原理&#xff0c;包括基本概念、分类及如何通过构建预测模型来应用这些理论。 目录 机器学习 机器学习概念 相关概念 机器学习根本&#xff1a;模型 数据的语言&#xff1a;特征与标签 训练与测试&#xf…...

Eclipse - Makefile generation

Eclipse - Makefile generation References right mouse click on the project -> Properties -> C/C Build -> Generate Makefiles automatically 默认会在 Debug 目录下创建 Makefile 文件。 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/...

Sora:新一代实时音视频通信框架

一、Sora简介 Sora是一个开源的实时音视频通信框架&#xff0c;旨在提供高效、稳定、可扩展的音视频通信解决方案。它基于WebRTC技术&#xff0c;支持跨平台、跨浏览器的实时音视频通信&#xff0c;并且具备低延迟、高并发、易集成等特点。 --点击进入Sora(一定要科学哦&#x…...

龟兔赛跑算法

一、题目 给定一个长度为 n1 的数组nums&#xff0c;数组中所有的数均在 1∼n1 的范围内&#xff0c;其中 n≥1。 请找出数组中任意一个重复的数。 样例 给定 nums [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。 二、解析 解决这个问题的一种有效方法是使用快慢指针&#xf…...

Yii2项目使用composer异常记录

问题描述 在yii2项目中&#xff0c;使用require命令安装依赖时&#xff0c;出现如下错误提示 该提示意思是&#xff1a;composer运行时&#xff0c;执行了yiisoft/yii2-composer目录下的插件&#xff0c;但是该插件使用的API版本是1.0&#xff0c;但是当前的cmposer版本提供的…...

【蓝桥杯 2021】图像模糊

图像模糊 题目描述 小蓝有一张黑白图像&#xff0c;由 nm 个像素组成&#xff0c;其中从上到下共 n 行&#xff0c;每行从左到右 m 列。每个像素由一个 0 到 255 之间的灰度值表示。 现在&#xff0c;小蓝准备对图像进行模糊操作&#xff0c;操作的方法为&#xff1a; 对于…...