`

【扩展欧几里得】POJ 2142 The Balance

阅读更多
KIDx 的解题报告
题目链接:http://poj.org/problem?id=2142
不懂扩展欧几里得请先参照这里:
http://972169909-qq-com.iteye.com/blog/1140914

题意:输入3个数,前2个是砝码的种类,问各要多少个才能称出第三个数出来【同时要使2个答案之和最小】


#include <iostream>
#include <cmath>
using namespace std;
#define inf 0x3fffffff
#define LL __int64

LL gcd (LL a, LL b)
{
	return b ? gcd (b, a%b) : a;
}

LL Egcd (LL a, LL b, LL &x, LL &y)
{
	if (b == 0)
	{
		x = 1;
		y = 0;
		return a;
	}
	LL d = Egcd (b, a%b, x, y);
	LL tp = x;
	x = y;
	y = tp - a/b*y;
	return d;
}

int main()
{
	LL a, b, n, x, y, vx, vy, d;
	while (scanf ("%I64d%I64d%I64d", &a, &b, &n), (a||b||n))
	{
		d = gcd (a, b);
		a /= d;
		b /= d;
		n /= d;
		Egcd (a, b, x, y);
		/**********①令y是最小正整数解**********/
		vy = y*n;
		vy = (vy % a + a) % a;
		vx = (n-b*vy) / a;
		if (vx < 0)		//题目要的是使用砝码的个数,所以要正整数
			vx = -vx;
		/**********②令x是最小正整数解**********/
		x *= n;
		x = (x % b + b) % b;
		y = (n-a*x) / b;
		if (y < 0)		//同理
			y = -y;
		/**********③使得和最小**********/
		if (x + y < vx + vy)
			vx = x, vy = y;
		printf ("%I64d %I64d\n", vx, vy);
	}
	return 0;
}
1
2
分享到:
评论

相关推荐

    扩展欧几里得算法求逆元

    扩展欧几里得算法求逆元

    使用扩展欧几里得算法求乘法逆元

    扩展欧几里得算法是欧几里得算法的一种扩展,不仅能够找到两个整数的最大公约数(GCD),还能同时计算出它们的贝祖等式解。贝祖等式是这样的形式:ax + by = gcd(a, b),其中x和y是求解的系数。当a和b互质时,即gcd...

    扩展欧几里得算法-python版

    当a,b,且a互质时,计算ax+by=1的值, 是计算RSA密钥的基本步骤之一。

    扩展欧几里得详解证明

    扩展欧几里得详解证明,里面没有例题,详细请看统一标题html的文档

    扩展欧几里得算法的matlab程序(求多项式的乘法逆元)

    在数学和计算机科学中,扩展欧几里得算法是一种用于计算最大公约数(GCD)的有效方法,同时还可以找到两个整数的线性同余方程的解。在这个场景下,我们关注的是如何使用扩展欧几里得算法来求解多项式的乘法逆元,...

    扩展欧几里得求逆-扩展欧几里得算法求乘法逆元

    扩展欧几里得算法是数论中的一个经典算法,它主要用于求解线性同余方程,例如找寻满足\( ax \equiv b \mod m \)的x值。在这个问题中,a、b和m都是整数,而m通常被视为模数。在密码学、计算机科学和数学中有广泛的...

    扩展的欧几里得算法(实现求乘法逆元)

    欧几里得是数论中的一个最初步的概念,它用来判断两个数的最大公因子,扩展的欧几里得能够进一步实现在两个数互素情况下的乘法可逆元。求可逆元是一些算法的基础。

    扩展欧几里得算法C++程序

    本算法实现了用扩展欧几里得的方法求最大公因子和模逆元的方法,可以直接运行。

    扩展欧几里得算法

    在编写扩展欧几里得算法的前提下,计算了两个数的最大公因数,判断两数是否互素。

    乘法逆元(扩展欧几里得算法)

    ### 乘法逆元与扩展欧几里得算法 #### 一、乘法逆元的基本概念 乘法逆元在密码学中具有重要的地位,它指的是对于一个整数 \( a \) 在模 \( p \) 意义下存在一个整数 \( b \),使得 \( ab \equiv 1 \pmod{p} \) ...

    利用扩展欧几里得算法快速计算组合数取模

    利用扩展欧几里得方法,进行快速的计算C(n,m)%P;

    扩展欧几里得详解

    扩展欧几里得 代码 详解 证明 例题

    大数四则运算以及扩展欧几里得原理

    以扩展欧式定理为基础,编程实现: 输入两个数, 判断:是否互素 分别算出:GCD;二者的互模逆。 考虑负数和大数(如256位)等情况。

    35扩展欧几里得算法1

    扩展欧几里得算法在 UVa 12169 Disgruntled Judge 题中的应用 扩展欧几里得算法是一种常用的数论算法,用于求解线性 Diophantine 方程 ax + by = gcd(a, b),其中 a, b 是整数,x, y 是未知数,gcd(a, b) 是 a 和 b...

    扩展欧几里得

    ACM数论基础知识入门之扩展欧几里得算法

    东南大学密码学实验——扩展欧几里得算法

    本实验“东南大学密码学实验——扩展欧几里得算法”是针对该领域的一次实践教学,旨在让学生深入理解并掌握扩展欧几里得算法这一基础数学工具。本文将详细解析该算法及其在密码学中的应用。 扩展欧几里得算法是基于...

    rsa.rar_扩展欧几里得 算法

    扩展欧几里得算法是数论中的一个基本算法,用于求解最大公约数(Greatest Common Divisor, GCD)以及找到整数a、b的乘积x和y,使得ax + by = gcd(a, b)。这个算法在密码学、计算机科学等领域有广泛应用,特别是在RSA...

    c语言实现扩展的欧几里得算法

    **扩展的欧几里得算法**是计算两个整数的最大公约数(Greatest Common Divisor, GCD)的一种方法,并且能同时得到两个数的线性组合系数。在数论和计算机科学中,这个算法有着广泛的应用,比如解模线性同余方程、计算...

    扩展欧几里得、模幂运算、欧拉函数

    在计算机科学和数学中,特别是在密码学和数论领域,扩展欧几里得算法、模幂运算以及欧拉函数是至关重要的工具。这些概念在解决复杂数学问题时起着核心作用,尤其是在处理整数的性质和计算上。下面我们将深入探讨这三...

Global site tag (gtag.js) - Google Analytics