小凯的疑惑(扩展欧几里得)

2024-01-30 02:58

本文主要是介绍小凯的疑惑(扩展欧几里得),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小凯的疑惑 

a , x , b , y , gcd(a,b)   扩展欧几里得啊!!!


对于任何k(k为正整数)  一定存在x,y 满足 ax+by=k;

想想扩展欧几里得 ax+by=gcd(a,b)=1 是一定有解的

设ax+by=gcd(a,b)=1的解为

(x0,y0) 满足(x0>=0,y0<0) (x0',y0') 满足(x0'<0,y0'>=0)那么k*x0 , k*y0 就是原方程的一组解


对于合法的数k,可以表示为 k=a*x1+b*y1(x1>=0,y1>=0)

我们要找最大的k使k-1不合法

对于不合法的数k-1,可以表示为

k-1=a*x1+b*y1-(a*x0+b*y0)=a*(x1-x0)+b*(y1-y0) ...1

或k-1=a*(x1-x0')+b*(y1-y0')  ...2

对于1 y0<0 所以y1-y0>0 只要x1-x0<0 就没搞

对于2 x0'<0 所以x1-x0'>0 只要y1-y0'<0就没搞

所以如果要肯定没搞,两个都要满足

所以x1=x0-1,y1=y0'-1 两个都没搞, 而且k最大

ans=(x0-1)*a+(y0-1)*b-1


我们学到了什么

1.看范围  --1e9,互质等字眼,我们要用O(logn)的扩展欧几里得

2.转化问题  --找最大的k使k-1不合法

3.式子标准化  --将k-1用a*(x1-x0)+b*(y1-y0)的形式表示

4.探究不合法的条件  --x1-x0<0,y1-y0'<0

5.贪心找最值  --x1=x0-1,y1=y0-1


void exgcd(int a,int b)
{if(b==0) g=a,x=1,y=0;else{exgcd(b,a%b);int x1=y,y1=x-a/b*y;x=x1,y=y1;printf("%d*(%d)+%d*(%d)=%d\n",a,x,b,y,g);}
}void solve()
{exgcd(a,b);x=(x+b)%b,y=(y+a)%a;cout<<(x-1)*a+(y-1)*b;
}

 

这篇关于小凯的疑惑(扩展欧几里得)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658912

相关文章

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

最大公因数:欧几里得算法

简述         求两个数字 m和n 的最大公因数,假设r是m%n的余数,只要n不等于0,就一直执行 m=n,n=r 举例 以18和12为例 m n r18 % 12 = 612 % 6 = 06 0所以最大公因数为:6 代码实现 #include<iostream>using namespace std;/

PHP7扩展开发之数组处理

前言 这次,我们将演示如何在PHP扩展中如何对数组进行处理。要实现的PHP代码如下: <?phpfunction array_concat ($arr, $prefix) {foreach($arr as $key => $val) {if (isset($prefix[$key]) && is_string($val) && is_string($prefix[$key])) {$arr[

PHP7扩展开发之字符串处理

前言 这次,我们来看看字符串在PHP扩展里面如何处理。 示例代码如下: <?phpfunction str_concat($prefix, $string) {$len = strlen($prefix);$substr = substr($string, 0, $len);if ($substr != $prefix) {return $prefix." ".$string;} else

PHP7扩展开发之类型处理

前言 这次,我们将演示如何在PHP扩展中如何对类型进行一些操作。如,判断变量类型。要实现的PHP代码如下: <?phpfunction get_size ($value) {if (is_string($value)) {return "string size is ". strlen($value);} else if (is_array($value)) {return "array si

PHP7扩展开发之依赖其他扩展

前言 有的时候,我们的扩展要依赖其他扩展。比如,我们PHP的mysqli扩展就依赖mysqlnd扩展。这中情况下,我们怎么使用其他扩展呢?这个就是本文讲述的内容。 我们新建立一个扩展,名字叫 demo_dep , 依赖之前的say扩展。 在demo_dep扩展中,我们实现demo_say方法。这个方法调用say扩展的say方法。 代码 基础代码 确保say扩展的头文件正确安装到了php