您的位置:首页 > 其它

基础算法—求最大公约数

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.
来源于百度百科
方法二:
更相减损法(等值算法)
以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
方法三:
穷举法
一个个通过循环列举求余计算

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;
}
}








内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: