首页 > 其他分享 >快速计算多个树的逆元

快速计算多个树的逆元

时间:2024-08-08 16:07:34浏览次数:16  
标签:多个 int res ll register 逆元 快速 getchar

设\(n\)个数分别为\(a_1\dots a_n\),令\(s_i\)为\(a_i\)的前缀积,那么对于\(1\le i<n\)有\(s_i^{-1}=s_{i+1}^{-1}*a_{i+1}\),那么\(a_i^{-1}=s_i^{-1}*s_{i-1}\),可以\(\Theta(n+\log p)\)的求出\(n\)个数的逆元
例题:LOJ161乘法逆元 2

#include<cstdio>
typedef long long ll;
const ll mod=1000000007;
inline ll jia(ll x,ll y){
	return x+y<mod?x+y:x+y-mod;
}
inline ll cheng(ll x,ll y){
	return x*y%mod;
}
inline ll pow(ll x,ll y){
	register ll res=1;
	for(;y;x=cheng(x,x),y>>=1)if(y&1)res=cheng(res,x);
	return res;
}
const int N=5000005;
int n;
inline ll read(){
	register ll x=0;
	register char c=getchar();
	for(;c<'0'||c>'9';c=getchar());
	for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+(c^48);
	return x;
}
ll a[N],ans,sv[N],s[N],p[N];
int main(){
	n=read(),s[0]=p[0]=1;
	for(register int i=1;i<=n;i++)a[i]=read(),s[i]=cheng(s[i-1],a[i]),p[i]=cheng(p[i-1],998244353);
	sv[n]=pow(s[n],mod-2);
	for(register int i=n;i>1;i--)sv[i-1]=cheng(sv[i],a[i]);
	for(register int i=1;i<=n;i++)ans=jia(ans,cheng(cheng(sv[i],s[i-1]),p[n-i]));
	printf("%lld",ans);
	return 0;
}

标签:多个,int,res,ll,register,逆元,快速,getchar
From: https://www.cnblogs.com/junjunccc/p/18349118

相关文章

  • 【深度学习与NLP】——快速入门Pytorch基本语法
    目录Pytorch基本语法1.1认识Pytorch1.1.1什么是Pytorch1.1.2Pytorch的基本元素操作1.1.3 Pytorch的基本运算操作1.1.4 关于TorchTensor和Numpyarray之间的相互转换1.1.5小节总结1.2Pytorch中的autograd1.2.1关于torch.Tensor1.2.2关于Tensor的操作1.2.3......
  • 初识LangChain的快速入门指南
    LangChain概述LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架,它提供了一系列工具、套件和接口,让开发者使用语言模型来实现各种复杂的任务,如文本到图像的生成、文档问答、聊天机器人等。LangChain简化了LLM应用程序生命周期的各个阶段:开发阶段:使用Lan......
  • python使用selenium和PyPDF2保存多个html页面为pdf
    检索资料时看到比较完备的资料,想着要把所有页面保存下来。正好使用下requests和BeautifulSoup库获取和解析所有的静态页,把静态页保存为单个pdf文件,然后再把所有的pdf文件合并起来生成1个PDF文档。本来想使用python子进程调用wkhtmltopdf工具把静态页生成为单个pdf,然而如此一来pdf......
  • 比肩DRF,轻量级、快速且强大的 API 开发:探索 DN 框架
    Django-Ninja框架,简称DN框架,是一个用于快速构建API的现代化框架。它基于Django构建,但专注于简洁性和性能,使用Pydantic进行数据验证,使得开发体验更加流畅和高效。为什么选择DN框架?DN框架结合了Django的稳定性和Pydantic的强大数据处理能力,适用于需要快速迭代和高......
  • 云计算:从多个维度探索
    云计算是当今信息技术领域最热门的话题之一。它不仅改变了企业的IT架构,也影响了个人用户的日常生活。那么,什么是云计算?它有哪些优点和挑战?在本文中,我们将从多个角度详细介绍云计算。1.定义云计算是一种通过网络提供可扩展、按需的计算资源和服务的方式。这些资源和服务包......
  • 快速基于 ClickHouse + Grafana 搭建可观测性解决方案 - 日志篇(ClickHouse 官方博客)
    引言作为一款高性能的OLAP数据库,ClickHouse被用于多种应用场景,包括时间序列(timeseries)数据的实时分析。其多样化的应用场景推动了大量分析函数的发展,这些函数有助于查询大多数类型的数据。这些查询特性加上高压缩率使得越来越多的用户开始利用ClickHouse来存储可观测性......
  • VSCode编译多个不同文件夹下的C++文件
        实际上VSCode编译C++文件就是通过向g++传递参数实现的,因此即使是不同包下面的cpp文件或者.h文件都是可以通过修改g++的编译参数实现,而在VSCode中,task.json文件其实就是在配置g++的编译参数,因此我们可以通过修改task.json里面的参数,实现不同包下cpp文件的编译。 ......
  • 什么是大模型?快速了解大模型基本概念
    在人工智能的世界里,大模型就像超级大脑一样,能够处理和理解大量的信息。你可能听说过ChatGPT,它就是大模型的一个典型代表。那么,什么是大模型呢?让我们一起来探索这个神奇的领域。什么是大模型?想象一下,如果你的大脑能够记住整个图书馆的所有书籍,并且能够理解每本书的内容,那么......
  • 虎码快速入门教程
    最近我需要写很多笔记,因此在网上找到了一种形码输入法。这个输入法的资料比较齐全,但是官网上的教程太混乱了,因此整理了一下教程。虎码快速入门教程虎码输入法简介虎码是一种利用算法(模拟退火)优化后的汉字编码方法。该方法能够将一个汉字按照特定的规则编码为1至4个字母。基于这......
  • Vue2 快速入门
    文章目录一、简介二、引入方式三、Vue实例四、插值表达式五、定义方法六、计算属性七、监听器八、指令九、事件修饰符一、简介官方网址:Vue2教学网站Vue是一个用于构建用户界面的渐进式JavaScript框架,在前端开发中被广泛应用,许多知名的网站和应用都采用了Vue......