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

P4549 【模板】裴蜀定理

题目传送门
前置知识:裴蜀定理

分析

对于输入的 n n n个数 a 1 a_1 a1 a 2 a_2 a2 a 3 ⋯ a n a_3\cdots a_n a3an,我们其实可以默认它们全部为非负数,因为对于 x i x_i xi,是可以取任意值的,所以当 a i a_i ai为负时, x i x_i xi取负数,两数之积就为正了,所以不用考虑判断 S < 0 S<0 S<0的情况。
接着,我们其实需要计算的就是 ∣ a 1 ∣ ⋅ x 1 + ∣ a 2 ∣ ⋅ x 2 + ∣ a 3 ∣ ⋅ x 3 + ⋯ + ∣ a n ∣ ⋅ x n \lvert a_1\lvert\cdot x_1+\lvert a_2\lvert\cdot x_2+\lvert a_3\lvert\cdot x_3+\cdots+\lvert a_n\lvert\cdot x_n a1x1+a2x2+a3x3++anxn
那么,又因为在裴蜀定理及其证明中说过裴蜀定理的推广:
对于多个整数 a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3…… a n a_n an(不全为零),存在整数 x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3…… x n x_n xn使得:
g c d ( gcd( gcd( a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3…… a n a_n an ) = a 1 x 1 + a 2 x 2 + a 3 x 3 + )=a_1x_1+a_2x_2+a_3x_3+ )=a1x1+a2x2+a3x3+…… a n x n a_nx_n anxn a 1 x 1 + a 2 x 2 + a 3 x 3 + a_1x_1+a_2x_2+a_3x_3+ a1x1+a2x2+a3x3+…… a n x n a_nx_n anxn g c d ( gcd( gcd( a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3…… a n a_n an ) ) )的倍数。
那么,原式就可以表示为: p ⋅ g c d ( ∣ a 1 ∣ , ∣ a 2 ∣ , ∣ a 3 ∣ , ⋯ , ∣ a n ∣ ) p\cdot gcd(\lvert a_1\lvert,\lvert a_2\lvert,\lvert a_3\lvert,\cdots,\lvert a_n\lvert) pgcd(∣a1,a2,a3,,an),当 S > 0 S>0 S>0时,要使 S S S最小, g c d ( ∣ a 1 ∣ , ∣ a 2 ∣ , ∣ a 3 ∣ , ⋯ , ∣ a n ∣ ) gcd(\lvert a_1\lvert,\lvert a_2\lvert,\lvert a_3\lvert,\cdots,\lvert a_n\lvert) gcd(∣a1,a2,a3,,an)为定值,那么 p p p取值为 1 1 1
所以,最后的答案就是所有 a [ i ] a[i] a[i]的最大公约数。

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();return x*f;
}
void print(int x){if(x<0)putchar('-'),x=-x;if(x<10){putchar(x+'0');return;}print(x/10);putchar(x%10+'0');
}
int n,ans;
int a[N];
int gcd(int a,int b){//辗转相除法if(a<b)swap(a,b);if(b==0)return a;return gcd(b,a%b);
}
signed main(){n=read();for(int i=1;i<=n;i++)ans=gcd(ans,abs(read()));print(ans);
}

相关文章:

  • Linux --进程状态
  • 利用多进程定时播放,关闭音乐播放器
  • 2025 年 AI 技能的全景解析
  • Hilbert曲线
  • XCPC 常用技巧
  • 中国风展示工作总结商务通用PPT模版
  • Python实例题:Python3实现图片转彩色字符
  • Markdown笔记
  • OneForAll 使用手册
  • 第九天:java注解
  • vue3路由跳转的三种方式
  • lidar和imu的标定(三)平面约束的方法
  • 无法运用pytorch环境、改环境路径、隔离环境
  • @Value,@ConfigurationProperties
  • Go 即时通讯系统:客户端与服务端 WebSocket 通信交互
  • lidar和imu的标定(一)Robust Real-time LiDAR-inertial Initialization
  • 2022—2025年:申博之路及硕士阶段总结
  • 4、数据标注的武林秘籍:Label-Studio vs CVAT vs Roboflow
  • Python编程基础(二)| 列表简介
  • SOC-ESP32S3部分:24-WiFi配网
  • 外部与wordpress发送/登封网站关键词优化软件
  • 苏州做门户网站的公司/南宁网站建设
  • 域名怎么创建网站/外链生成器
  • 网站建设负责人证明/郑州网络推广
  • asp网站做搜索/在线seo优化
  • 装修设计那个网站好/seo做什么网站赚钱