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;
}
分享到:
相关推荐
扩展欧几里得算法求逆元
扩展欧几里得算法是欧几里得算法的一种扩展,不仅能够找到两个整数的最大公约数(GCD),还能同时计算出它们的贝祖等式解。贝祖等式是这样的形式:ax + by = gcd(a, b),其中x和y是求解的系数。当a和b互质时,即gcd...
当a,b,且a互质时,计算ax+by=1的值, 是计算RSA密钥的基本步骤之一。
扩展欧几里得详解证明,里面没有例题,详细请看统一标题html的文档
在数学和计算机科学中,扩展欧几里得算法是一种用于计算最大公约数(GCD)的有效方法,同时还可以找到两个整数的线性同余方程的解。在这个场景下,我们关注的是如何使用扩展欧几里得算法来求解多项式的乘法逆元,...
扩展欧几里得算法是数论中的一个经典算法,它主要用于求解线性同余方程,例如找寻满足\( ax \equiv b \mod m \)的x值。在这个问题中,a、b和m都是整数,而m通常被视为模数。在密码学、计算机科学和数学中有广泛的...
欧几里得是数论中的一个最初步的概念,它用来判断两个数的最大公因子,扩展的欧几里得能够进一步实现在两个数互素情况下的乘法可逆元。求可逆元是一些算法的基础。
本算法实现了用扩展欧几里得的方法求最大公因子和模逆元的方法,可以直接运行。
在编写扩展欧几里得算法的前提下,计算了两个数的最大公因数,判断两数是否互素。
### 乘法逆元与扩展欧几里得算法 #### 一、乘法逆元的基本概念 乘法逆元在密码学中具有重要的地位,它指的是对于一个整数 \( a \) 在模 \( p \) 意义下存在一个整数 \( b \),使得 \( ab \equiv 1 \pmod{p} \) ...
利用扩展欧几里得方法,进行快速的计算C(n,m)%P;
扩展欧几里得 代码 详解 证明 例题
以扩展欧式定理为基础,编程实现: 输入两个数, 判断:是否互素 分别算出:GCD;二者的互模逆。 考虑负数和大数(如256位)等情况。
扩展欧几里得算法在 UVa 12169 Disgruntled Judge 题中的应用 扩展欧几里得算法是一种常用的数论算法,用于求解线性 Diophantine 方程 ax + by = gcd(a, b),其中 a, b 是整数,x, y 是未知数,gcd(a, b) 是 a 和 b...
ACM数论基础知识入门之扩展欧几里得算法
本实验“东南大学密码学实验——扩展欧几里得算法”是针对该领域的一次实践教学,旨在让学生深入理解并掌握扩展欧几里得算法这一基础数学工具。本文将详细解析该算法及其在密码学中的应用。 扩展欧几里得算法是基于...
扩展欧几里得算法是数论中的一个基本算法,用于求解最大公约数(Greatest Common Divisor, GCD)以及找到整数a、b的乘积x和y,使得ax + by = gcd(a, b)。这个算法在密码学、计算机科学等领域有广泛应用,特别是在RSA...
**扩展的欧几里得算法**是计算两个整数的最大公约数(Greatest Common Divisor, GCD)的一种方法,并且能同时得到两个数的线性组合系数。在数论和计算机科学中,这个算法有着广泛的应用,比如解模线性同余方程、计算...
在计算机科学和数学中,特别是在密码学和数论领域,扩展欧几里得算法、模幂运算以及欧拉函数是至关重要的工具。这些概念在解决复杂数学问题时起着核心作用,尤其是在处理整数的性质和计算上。下面我们将深入探讨这三...