1. 程式人生 > >求三個數的最大公約數和最小公倍數

求三個數的最大公約數和最小公倍數

題目:求兩個正整數的最大公約數和最小公倍數。
基本要求:1.程式風格良好(使用自定義註釋模板),兩種以上演算法解決最大公約數問題,提供友好的輸入輸出。
提高要求:1.三種以上演算法解決兩個正整數最大公約數問題。
2.求3個正整數的最大公約數和最小公倍數
思路: 運用輾轉相除法,輾轉相加法和窮舉法可以求出最大公約數
根據最小公倍數=兩數相乘再除以最大公約數可以求出最小公倍數
程式流程圖:
1.輾轉相除法求最大公約數
這裡寫圖片描述
2.輾轉相減法求最大公約數
這裡寫圖片描述


3.窮舉法求最大公約數
這裡寫圖片描述
求三個數的最大公約數:將這三種演算法封裝成函式,需要求三個數的最大公約數是,先呼叫函式,將這兩個數的最大公約數求出,然後將求出的最大公約數與第三個數呼叫函式,就可以求出這三個數的最大公約數了,判斷:當最大公約數為一時,則輸出沒有最大公約數
4求最小公倍數
這裡寫圖片描述
求三個數的最小公倍數:先呼叫函式,求出這兩個數的最小公倍數,賦值給一個變數i,
求出i和第三個數的最大公約數,然後再次呼叫函式,求出的值即為這三個數的最小公倍數
資料測試
1).輾轉相除法求最大公約數和最小公倍數
這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述
2).輾轉相減法求最大公約數和最小公倍數
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
2)窮舉法求最大公約數和最小公倍數
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
程式碼塊如下

package com.xiao;
import java.util.Scanner;
public class Test {
    public static void main(String args[]) {
        Scanner scanner =new Scanner(System.in);
        while
(true) { System.out.println("請輸入num1,num2,num3三個整數"); int num1=scanner.nextInt(); int num2=scanner.nextInt(); int num3=scanner.nextInt(); int GCD=GCD(num1,num2);//先求num1和num2兩個的最大公約數GCD int GCD1=GCD(num3,GCD);//求前兩個數的最大公約數GCD和第三個數num3的最大公約數 if(GCD1==1) { System.out.println(num1+" "+num2+" "+num3+"沒有最大公約數");//如果餘數為1,則沒有最大公約數 }else { System.out.println(num1+" "+num2+" "+num3+"的最大公約數為"+GCD1);//如果餘數不為1,則輸出最大公約數 } int LCM=LCM(num1,num2,GCD);//先求num1和num2的最小公倍數LCM int GCD2=GCD(LCM,num3);//再求LCM和num3的最大公約數 int LCM1=LCM(LCM,num3,GCD2);//最後求LCM和num3的最小公倍數 System.out.println(num1+" "+num2+" "+num3+"的最小公倍數為"+LCM1);//輸出最小公倍數 } } public static int GCD(int num1,int num2) { // //求最大公約數,運用輾轉相除法 // PX(num1,num2); // int Remainder =0;//餘數 // Remainder=num1%num2; // while(Remainder!=0) { // num1=num2; // num2=Remainder; // Remainder=num1%num2; // } // return num2; // // //輾轉相減法 // while(num1!=num2) { // if(num1>num2) { // num1=num1-num2; // }else { // num2=num2-num1; // } // } // return num2; // //窮舉法 PX(num1, num2); int num=0; for(int i=num2;i>0;i--) { if(num1%i==0&&num2%i==0) { num=i; break; } } return num; } //求最小公倍數,將三個數除以他們的最大公約數,然後相乘,再乘以最大公約數 public static int LCM(int num1,int num2,int GCD) { return num1/GCD*num2; } //排序, public static void PX(int num1,int num2) { int a; if(num1<num2) { a=num1; num1=num2; num2=a; } } }