最大正整数和最小负整数的代码_Acwing 204 表达整数的奇怪方式

ceee97a09631188c8a629cf24d439d5c.png

题目描述

给定2n个整数

求一个最小的非负整数
,满足
,

输入格式

第1行包含整数n。

行:每
行包含两个整数
,数之间用空格隔开。

输出格式

输出最小非负整数

,如果
不存在,则输出-1。

如果存在
,则数据保证
一定在64位整数范围内。

数据范围

,
,

输入样例:

2
8 7
11 9

输出样例:

31

解决方案

推导公式 时间复杂度O(n)

由题目中

可知
一定是
mod
的余数,所以我们从题目中的前两个式子开始推

将①②这两个式子合并得:

*
+
*
+

移项得:

*
+
*

我们发现,可以通过扩展欧几里得算法获得

的值,这个方程的成立的前提是
,也就是
的最大公约数可以整除
,方程的通解为:

的通解代入①式得

(这里[a1,a2]指的是a1和a2的最小公倍数)

我们将

看做
,[a1,a2]看做a

那么这个方程就可以写成

我们惊奇的发现这不是和原先①式和②式的一样吗? 那么这里就可以有结果了,我们只需要将所有的表达式换成这一种表示,最终结果所求的最小的正整数解不就是

的值嘛
#include 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值