CF1011E.Border-裴蜀定理

news/2024/5/17 19:41:48

link:https://codeforces.com/contest/1011/problem/E
题意绕来绕去的不讲人话,看了半天。
翻译过来就是,给 \(a_1,\dots,a_n\) ,和一个数 \(k\),求所有的 \(d\) 满足:存在某个 \(a_1,\dots,a_n\) 的线性组合 \(\sum a_i w_i\) 在模 \(k\) 意义下恰为 \(d\).

\(1\leq n,k\leq 10^5,1\leq a_i\leq 10^9\).


以前数学算法可能不是很普及,E题居然还能出这种东西…取模肯定是比不取模简单许多了(不然如果要求 \(w_i\geq 0\) 之类的还更麻烦…)

因为\(a\) 序列的理想是 \(\gcd(a_1,\dots,a_n)\)\(d\) 的所有可能取值自然是理想的模 \(k\) 下的倍数, 而这恰是理想和 \(k\) 生成的理想,即 \(\gcd(a_1,\dots,a_n,k)\) 的所有倍数…当然这题 \(k\) 很小,可以暴力枚举\(\gcd(a_1,\dots,a_n)\) 的倍数也行…

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define endl '\n'
#define fastio ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const int N=1e5+5;
int n,k,a[N];
int main(){fastio;cin>>n>>k;rep(i,1,n){cin>>a[i];a[i]%=k;}int d=k;rep(i,1,n)d=__gcd(a[i],d);vector<int> ans;ans.push_back(0);if(d){for(int i=d;i<k;i+=d)ans.push_back(i);}cout<<ans.size()<<endl;for(auto x:ans)cout<<x<<' ';return 0;
}

小彩蛋:时间复杂度

复杂度乍一看是 \(O(n\log \max a)\) 的?并不是,虽然单独求 \(\gcd\) 可能是 \(O(\log \max a)\),但是这里求的是所有数的gcd,实际的复杂度会更优:
首先计算 \(\gcd(a,b)=d\) 和计算 \(\gcd(a/d,b/d)=1\) 的代价是一样的,因此如果 \(\gcd(a,b)=d\),求解 \(\gcd\) 的代价其实是 \(O(\min(a,b)/d)\),那么这里求连续的 \(\gcd\) 的复杂度其实应该是:

\[O(\sum_{i=2}^n (1+\log\frac{\min(d_{i-1},a_i)}{d_i}))\leq O(n+\sum_{i=2}^n \log \frac{d_{i-1}}{d_i})=O(n+\log\max a_i) \]

所以这里复杂度的关系其实是加上去的,而不是乘。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Momentum Contrast (MoCo) for Unsupervised Visual Representation Learning

1 Introduction 1.1 Instance discrimination (样本判别) 制定了一种划分正样本和负样本的规则 1.2 InfoNCE Loss 1.3 Momentum 动量在数学上可以理解为是一种指数移动平均(Exponential Moving Average) \(m\)为动量系数,目的是为了 \(Y_t\) 不仅仅依赖于当前时刻的输入 \(X_t…

springboot整合knfi4j

1.pom文件添加依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version></dependency>2.配置knfi4j @Configuration @EnableSwagger2 @Enable…

github在开启双因素认证后无法push

github在开启了双因素认证后,无法push代码 解决办法 1.打开github,点击右上角头像,点击setting2.选择左边菜单最右下角的Developer Settings3.点击 Person access tokens,选择第二个,Tokens(classic)4.创建一个token,可以选择过期时间和权限,如果是个人使用,直接选择不过期,勾上…

mysql刷题题后感

刷题的时候会将一些题目收藏,也会收藏错题,做完了整合一下,会有一些补充知识点。函数篇(和长篇大论的查询有交集) Q1: 查询语句select stuff(lo ina,3, 1, ve ch)结果为?love love china china love china答:stuff,删除并加入字符,STUFF(原字符, 开始位置, 删除长度,…

软件设计师:UML

UML基本概念UML(Unified Modeling Language,统一建模语言) UML词汇表包含3种构造块:事物、关系、图 事物结构事物:静态部分,如类、接口、用例等 行为事物:动态部分,如交互、状态机、活动 分组事物:包Package 注释事物:注释关系 UML中有4种关系:依赖、关联、泛化、实现…

linux13-用户,用户组

linux13-用户,用户组需要root权限执行 group add 创建用户组 # 查看含有关键词catcats66的组, 不存在 getent group | catcats66# 添加用户组catcats66 sudo groupadd catcats66 # 查询到含有关键词catcats66的组 getent group | catcats66groupdel 删除用户组 # 删除用户组 gr…

【VMware vSAN】如何删除虚拟机存储策略中的vSAN默认存储策略。

登录vSphere Client,展开左上角设置-策略和配置文件-虚拟机存储策略,可以查看系统默认创建的虚拟机存储策略。这些存储策略由系统自动生成,其中有一部分存储策略仅用于vSAN数据存储,作为vSAN 默认存储策略以应用于,当在部署虚拟机时未进行自定义存储策略时所默认分配的策略…

探索软件设计的九大核心架构模式

在当今迅速发展的软件开发领域,设计出卓越的软件系统是每一位程序员的追求。软件架构扮演着至关重要的角色,决定了系统的可维护性、可扩展性和性能。本文将深入探讨九大核心架构模式,揭示它们在软件设计中的美妙之处,以及在实际应用中的最佳实践。 分层架构(Layered Archi…