最近开始在"编程啦"上做题,不知道能坚持多久...
"超级最小公倍数"题目:(地址: http://www.bianchengla.com/practise/problem?id=1001)
给2个正整数a,b(1<=a,b<=10^100),求a和b的最小公倍数。
求最小公倍数的话,一般使用公式: x*y=最小公倍数*最大公约数. 而求最大公约数,也就是gcd,一般用辗转相除法和辗转相减法.
辗转相除法:
public static BigInteger gcd(BigInteger x, BigInteger y) {
BigInteger r;
x = x.min(y);
y = x.max(y);
r = x.mod(y);
while (!r.equals(BigInteger.ZERO)) {
x = y;
y = r;
r = x.mod(y);
}
return y;
}
之所以用BigInteger,是因为题目中说b<=10100,int和long都放不下. 然而在使用我自己编写的gcd函数时,我测试的几个数据都没错误,但提交的时候却老是说"结果错误".
别人的能通过的代码:(来自http://hi.baidu.com/ylllxw08/blog/item/06d10585bbd55ed6bd3e1e04.html)
import java.util.Scanner;
import java.math.BigInteger;
public class Main {
public static void main(String args[]) {
BigInteger a, b, c, d, e;
String s, t;
Scanner cin = new Scanner(System.in);
while (cin.hasNext()) {
s = cin.next();
t = cin.next();
a = new BigInteger(s);
b = new BigInteger(t);
e = BigInteger.valueOf(0);
if (a.compareTo(e) == 0 && b.compareTo(e) == 0)
break;
c = a.gcd(b);
d = a.multiply(b);
System.out.println(d.divide(c));
}
}
}
和我的代码的区别是,他用的是BigInteger提供的gcd函数,而我用的是自己写的. 我的的gcd到底哪里出错了呢?
分享到:
相关推荐
基于欧几里得算法,我们可以利用以下性质求最小公倍数:如果a和b的最大公约数为d,则它们的最小公倍数为a * b / d。这是因为a和b能被d整除,所以a * b也是d的倍数。而LCM(a, b)是最小的这样的倍数。 现在,我们扩展...
根据提供的文件信息,本文将详细解释如何使用C语言来实现最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)的计算。 ### 最大公约数(GCD) #### 概念 最大公约数是指两个...
用LabVIEW求最大公约数和最小公倍数。可以自行选择数据。
本文将深入探讨C++编程中求最小公倍数的几种常见方法,并结合相关标签“联合公倍数”进行讨论。 1. **直接公式法**: 最小公倍数可以通过两个数的乘积除以它们的最大公约数(GCD,Greatest Common Divisor)得到。...
本主题主要关注求最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)的三种常见算法,通过流程图的方式进行阐述。下面我们将详细探讨这五种算法及其流程。 1. 辗转相除法...
在VB中,我们可以先编写一个函数来计算两个数的最大公约数,然后利用这个函数来求最小公倍数。以下是一个简单的VB代码实现: ```vb ' 计算两个数的最大公约数 Function GCD(a As Integer, b As Integer) As Integer...
VB求最大公约数和最小公倍数 VB语言是Microsoft公司开发的一种高级编程语言,广泛应用于Windows操作系统平台上的应用程序开发。VB语言具有简单易学、开发效率高、应用广泛等特点,深受广大开发者的喜爱。在VB语言中...
在编程领域,尤其是在C#语言中,计算三个数的最小公倍数(LCM,Least Common Multiple)是一项常见的任务,特别是在处理数学问题或算法设计时。最小公倍数是指能够同时整除三个数的最小正整数。在这个项目中,我们将...
基于FPGA开发板的两位数求最大公约数和最小公倍数的设计,该设计中利用辗转相减法求得公约数与公倍数,且两个数的数值可通过按键修改,设计灵活可靠。该设计基于vivado开发,并带有testbench文件,方便仿真学习。
编写求两个整数的最小公倍数的函数,函数原型为:int maxb(int x,inty);并编写主函数,调用该函数求键盘输入的两个整数的最小公倍数,并在屏幕输出。
vba求最小公倍数
建议采用更高效的算法,如上述的辗转相除法或更相减损法来求最大公约数,并基于此快速计算最小公倍数,从而提高程序的执行效率和性能。 总之,在实际的IT项目开发中,理解并掌握最大公约数和最小公倍数的求解方法...
穷举法求最大公约数流程图和穷举法求最小公倍数盒图都将展示这个过程,通过一系列并行和串行的矩形来描述循环和条件判断。 在穷举法求最大公约数的流程中,步骤如下: 1. 设置一个变量lcm初始化为较小的数。 2. ...
### 最小公倍数(LCM):编程大赛解答与实现 #### 概述 在数学和计算机科学中,最小公倍数(Least Common Multiple,简称LCM)是指能够同时被一组数字整除的最小正整数。例如,数字3和5的最小公倍数是15,因为15是...
首先求出任意两个数的最大公约数,然后用这两个数的乘积除以最大公约数得到两数的最小公倍数。再用得到的最小公倍数与第三个数重复这个过程。 ```python import math def gcd(a, b): while b != 0: a, b = b, a ...
python求最大公约数和最小公倍数 #辗转相除法 def gcd(a,b): #最大公约数函数,且最小公倍数 = 两个数相乘 / 最大公约数 if b == 0: return a else: return gcd(b,a%b) print("请输入两个数:") j,k = input()....
1. **最大公约数法**:利用欧几里得算法(辗转相除法)求出两数的最大公约数(GCD),然后用两数乘积除以最大公约数即可得到最小公倍数。公式为:LCM(a, b) = |a * b| / GCD(a, b)。例如,计算12和18的最小公倍数,...
"最大公约数和最小公倍数的计算方法" 最大公约数和最小公倍数是数学中两个重要的概念,它们在算法设计、数据分析和科学计算等领域都有着广泛的应用。本文将详细介绍两种常用的计算最大公约数和最小公倍数的方法,即...
在IT领域,尤其是在编程与算法的学习中,计算两个整数的最大公约数(Greatest Common Divisor,简称GCD)和最小公倍数(Least Common Multiple,简称LCM)是基础而又重要的知识点。从给定的文件标题“输出m,n的最大...
利用最大公约数和最小公倍数之间的关系(即两个数的乘积等于它们的最大公约数与最小公倍数的乘积),可以高效地计算出最小公倍数。 #### 关键代码分析 程序的关键部分包括了`gcd`函数和`main`函数。 1. **`gcd`...