数论:裴蜀定理

文章介绍了裴蜀定理在数论中的应用,该定理确保了关于最大公约数的线性组合存在整数解。给定一个整数序列,目标是找到另一序列,使两序列对应项乘积之和大于0且尽可能小。文章提供了一个样例输入和输出,展示如何通过计算序列的最大公约数来确定满足条件的最小和。
摘要由CSDN通过智能技术生成

裴蜀定理

       在数论中,裴蜀定理是一个关于最大公约数(或最大公约式)的定理,裴蜀定理得名于法国数学家艾蒂安·裴蜀。 ——引自百度百科

具体内容:

       若 a , b  是整数,且 gcd ⁡ ( a , b ) = d ,那么对于任意的整数 x , y , ax + by 都一定是 d 的倍数,特别地,一定存在整数 x , y 使 a x + b y = d 成立。

        简单来说,我们设 d = gcd ⁡ ( a , b ) ,那么对于方程 a x + b y = d ,一定存在一组整数解。并且对于方程 a x + b y = z ,如果满足 d|z,那么方程一定有整数解,否则无整数解。

举个例子:

# 【模板】裴蜀定理(洛谷P4549)

## 题目描述

 ,使得 S>0S>0 且 SS 尽可能的小。

给定一个包含 $n$ 个元素的**整数**序列 $A$,记作 $A_1,A_2,A_3,...,A_n$。

求另一个包含 $n$ 个元素的待定**整数**序列 $X$,记 $S=\sum\limits_{i=1}^nA_i\times X_i$,使得 $S>0$ 且 $S$ 尽可能的小。

## 输入格式

第一行一个整数 $n$,表示序列元素个数。  

第二行 $n$ 个整数,表示序列 $A$。

## 输出格式

一行一个整数,表示 $S>0$ 的前提下 $S$ 的最小值。

## 样例 #1

### 样例输入 #1

```

2

4059 -1782

```

### 样例输出 #1

99

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

inline int gcd(int x, int y) {
    return y ? gcd(y, x%y) : x;
}

int n;

int main() {
    scanf("%d", &n);
    int ans = 0, tmp;
    for(int i=1; i<=n; i++) {
        scanf("%d", &tmp);
        if(tmp < 0) tmp = -tmp;
        ans = gcd(ans, tmp);
    }
    printf("%d", ans);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值