基础算法—求最大公约数
2017-03-22 20:26
169 查看
题目:求最大公约数
基本要求:1、 从键盘输入两个整数,输出两个整数的最大公约数。
2、使用三种算法解决问题
3、提供友好的输入输出,并进行。
4 、输入数据的正确性验证。
方法一:
辗转相乘法(欧几里得算法)
例如,求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29),
∴ (319,58)=(58,29);
∵ 58÷29=2(余0),
∴ (58,29)= 29;
∴ (319,377)=29.
来源于百度百科
方法二:
更相减损法(等值算法)
以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
方法三:
穷举法
一个个通过循环列举求余计算
基本要求:1、 从键盘输入两个整数,输出两个整数的最大公约数。
2、使用三种算法解决问题
3、提供友好的输入输出,并进行。
4 、输入数据的正确性验证。
方法一:
辗转相乘法(欧几里得算法)
例如,求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29),
∴ (319,58)=(58,29);
∵ 58÷29=2(余0),
∴ (58,29)= 29;
∴ (319,377)=29.
来源于百度百科
方法二:
更相减损法(等值算法)
以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
方法三:
穷举法
一个个通过循环列举求余计算
package project; import java.util.Scanner; import javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction; /** * 求最大公约数 * 方法一:欧几里得算法 * 主要思想:是辗转相除法 * 方法二:更项减损法 * 方法三:穷举法 * @author ZW_com * 2017/3/22 */ public class Test1 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("输入第一个数"); int number1 = input.nextInt(); System.out.println("请输入第二数"); int number2 = input.nextInt(); //获取当前时间的纳秒数 long start1 = System.nanoTime(); System.out.println("辗转相除法:结果是"+MaxCommonDivisor1(number1,number2)); long end1 = System.nanoTime(); System.out.println("消耗的时间"+ (end1-start1)+"纳秒"); long start2 = System.nanoTime(); System.out.println("更项减损法:结果是"+MaxCommonDivisor2(number1,number2)); long end2 = System.nanoTime(); System.out.println("消耗的时间"+ (end2-start2)+"纳秒"); long start3 = System.nanoTime(); System.out.println("穷举法结果是"+MaxCommonDivisor3(number1,number2)); long end3 = System.nanoTime(); System.out.println("消耗的时间"+ (end3-start3)+"纳秒"); } /** * 辗转相除法 */ public static int MaxCommonDivisor1(int number1, int number2){ if(number1<number2){ int temp = number1; number1 = number2; number2 = temp; } if(number1%number2==0){ return number2; }else{ return MaxCommonDivisor1(number2, number1%number2); } } /** * 更项减损法 */ public static int MaxCommonDivisor2(int number1, int number2){ if(number1<number2){ int temp = number1; number1= number2; number2 = temp; } if(number2==0){ return number1; } return MaxCommonDivisor2(number2, number1-number2); } /** * 穷举法 */ public static int MaxCommonDivisor3(int number1, int number2){ int i ; if(number1<number2){ int temp = number1; number1 = number2; number2 = temp; } for(i = number2; i > 0; i--){ if(number1%i==0&&number2%i==0){ break; } } return i; } }
相关文章推荐
- 算法基础-最大公约数
- java 算法基础之一寻找最大公约数
- java基础算法之通过辗转相除求 最大公约数
- 『算法』求串s和串t的最大公约子串
- 最大公约数算法
- 三种算法求最大公约数——Java实现
- Euclide(欧几里德)算法求最大公约数
- 最大公约数(greatest common divisor)算法
- 欧几里德算法(辗转相处算法:最大公约数算法)
- 最大公约数算法
- 最大公约数的算法
- 计算最大公约数的算法
- 欧几里得求两个整数最大公约数算法的汇编递归实现代码
- [数论]数论的基础知识——最大公约数、最小公倍数
- 算法如功夫——C++输入两个数求它们的最大公约数
- 算法:最大公约数
- 算法.数学.初级.求最小公倍数--(利用最大公约数的辗转相除法),powerbuilder powerscript实现
- 最大公约数的算法
- C++/C经典算法百题--(39-42)年龄几何,三色球问题,两个正整数的最大公约数和(GCD)和最小公倍数(LCM)
- 最大公约数/最小公倍数-算法