package one;
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的豐澤網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
import java.util.*;public class ProOne {
//題目:輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。
//程序分析:利用輾除法。
public static void main(String[] args)
{
int m=0,n=0,m1=0,n1=0;
int a;
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入m的值:");
m=scanner.nextInt();
System.out.println("請(qǐng)輸入n的值:");
n=scanner.nextInt();
//將輸入的m和n值備份;
m1=m;
n1=n;
//取得兩個(gè)數(shù)相除的余數(shù);
a=m%n;
while(a!=0)
{
m1=n1;n1=a;a=m1%n1;
}
System.out.println("m,n的最大公約數(shù)為:"+n1);
//求兩個(gè)數(shù)字的最小公倍數(shù)的方法為:(兩個(gè)數(shù)的乘積)/(兩個(gè)數(shù)字的最大公約數(shù));
System.out.println("m,n兩個(gè)數(shù)的最小公倍數(shù)為:"+m*n/n1);
}
}//我以前做的,你看看吧!
[java] view plaincopy\x0d\x0aimport java.util.*; \x0d\x0a \x0d\x0a/*求最大公約數(shù)和最小公倍數(shù)*/ \x0d\x0apublic class MaxCommonDivisorAndMinCommonMultiple { \x0d\x0a \x0d\x0a public static void main(String[] args) { \x0d\x0a Scanner scan = new Scanner(System.in);// 接收控制臺(tái)輸入的信息 \x0d\x0a \x0d\x0a System.out.print("請(qǐng)輸入第一個(gè)整數(shù):"); \x0d\x0a int num1 = scan.nextInt(); // 取出控制臺(tái)輸入的信息 \x0d\x0a \x0d\x0a System.out.print("請(qǐng)輸入第二個(gè)整數(shù):"); \x0d\x0a int num2 = scan.nextInt(); // 取出控制臺(tái)輸入的信息 \x0d\x0a \x0d\x0a System.out.println(maxCommonDivisor(num1, num2));// 調(diào)用maxCommonDivisor()方法 \x0d\x0a System.out.println(minCommonMultiple(num1, num2));// 調(diào)用minCommonMultiple()方法 \x0d\x0a } \x0d\x0a \x0d\x0a // 遞歸法求最大公約數(shù) \x0d\x0a public static int maxCommonDivisor(int m, int n) { \x0d\x0a if (m n,若mn,若m
回答于?2022-11-16
//求最大公約數(shù)
publicstaticintcommonDivisor(intn,intm){
//輾轉(zhuǎn)相除是用大的除以小的。如果nwhile(n%m!=0){
inttemp=n%m;
n=m;
m=temp;
}
returnm;
}
//求最小公倍數(shù)
publicstaticintcommonMultiple(intn,intm){
returnn*m/commonDivisor(n,m);//兩數(shù)相乘除以最大公約數(shù)
}
輸入兩個(gè)正整數(shù)m和n, 求其最大公約數(shù)和最小公倍數(shù).
用輾轉(zhuǎn)相除法求最大公約數(shù)
算法描述:
m對(duì)n求余為a, 若a不等于0
則 m - n, n - a, 繼續(xù)求余
否則 n 為最大公約數(shù)
最小公倍數(shù) = 兩個(gè)數(shù)的積 / 最大公約數(shù)
#include
int main()
{
int m, n;
int m_cup, n_cup, res; /*被除數(shù), 除數(shù), 余數(shù)*/
printf("Enter two integer:\n");
scanf("%d %d", m, n);
if (m 0 n 0)
{
m_cup = m;
n_cup = n;
res = m_cup % n_cup;
while (res != 0)
{
m_cup = n_cup;
n_cup = res;
res = m_cup % n_cup;
}
printf("Greatest common divisor: %d\n", n_cup);
printf("Lease common multiple : %d\n", m * n / n_cup);
}
else printf("Error!\n");
return 0;
}
★ 關(guān)于輾轉(zhuǎn)相除法, 搜了一下, 在我國(guó)古代的《九章算術(shù)》中就有記載,現(xiàn)摘錄如下:
約分術(shù)曰:“可半者半之,不可半者,副置分母、子之?dāng)?shù),以少減多,更相減損,求其等也。以等數(shù)約之?!?/p>
其中所說(shuō)的“等數(shù)”,就是最大公約數(shù)。求“等數(shù)”的辦法是“更相減損”法,實(shí)際上就是輾轉(zhuǎn)相除法。
輾轉(zhuǎn)相除法求最大公約數(shù),是一種比較好的方法,比較快。
對(duì)于52317和75569兩個(gè)數(shù),你能迅速地求出它們的最大公約數(shù)嗎?一般來(lái)說(shuō)你會(huì)找一找公共的使因子,這題可麻煩了,不好找,質(zhì)因子大。
現(xiàn)在教你用輾轉(zhuǎn)相除法來(lái)求最大公約數(shù)。
先用較大的75569除以52317,得商1,余數(shù)23252,再以52317除以23252,得商2,余數(shù)是5813,再用23252做被除數(shù),5813做除數(shù),正好除盡得商數(shù)4。這樣5813就是75569和52317的最大公約數(shù)。你要是用分解使因數(shù)的辦法,肯定找不到。
那么,這輾轉(zhuǎn)相除法為什么能得到最大公約數(shù)呢?下面我就給大伙談?wù)劇?/p>
比如說(shuō)有要求a、b兩個(gè)整數(shù)的最大公約數(shù),a>b,那么我們先用a除以b,得到商8,余數(shù)r1:a÷b=q1…r1我們當(dāng)然也可以把上面這個(gè)式子改寫成乘法式:a=bq1+r1------l)
如果r1=0,那么b就是a、b的最大公約數(shù)3。要是r1≠0,就繼續(xù)除,用b除以r1,我們也可以有和上面一樣的式子:
b=r1q2+r2-------2)
如果余數(shù)r2=0,那么r1就是所求的最大公約數(shù)3。為什么呢?因?yàn)槿绻?)式變成了b=r1q2,那么b1r1的公約數(shù)就一定是a1b的公約數(shù)。這是因?yàn)橐粋€(gè)數(shù)能同時(shí)除盡b和r1,那么由l)式,就一定能整除a,從而也是a1b的公約數(shù)。
反過(guò)來(lái),如果一個(gè)數(shù)d,能同時(shí)整除a1b,那么由1)式,也一定能整除r1,從而也有d是b1r1的公約數(shù)。
這樣,a和b的公約數(shù)與b和r1的公約數(shù)完全一樣,那么這兩對(duì)的最大公約數(shù)也一定相同。那b1r1的最大公約數(shù),在r1=0時(shí),不就是r1嗎?所以a和b的最大公約數(shù)也是r1了。
有人會(huì)說(shuō),那r2不等于0怎么辦?那當(dāng)然是繼續(xù)往下做,用r1除以r2,……直到余數(shù)為零為止。
在這種方法里,先做除數(shù)的,后一步就成了被除數(shù),這就是輾轉(zhuǎn)相除法名字的來(lái)歷吧。
import?java.util.Scanner;
public?class?Gongbei?{
public?static?void?main(String[]?args)?{
Scanner?sc?=?new?Scanner(System.in);
System.out.println("輸入第一個(gè)數(shù):");
int?x?=?sc.nextInt();
System.out.println("輸入第二個(gè)數(shù):");
int?y?=?sc.nextInt();
System.out.println("最小公倍數(shù):"+gongbei(x,y));
}
public?static?int?gongyue(int?x,int?y){//最大公約數(shù)
if(xy){
int?t?=?x;
x?=?y;
y?=?t;
}
while(x!=0){
int?temp?=?y%x;
y?=?x;
x?=?temp;
}
return?y;
}
public?static?int?gongbei(int?x,int?y){//最小公倍數(shù)
int?a?=?x,b?=?y;
int?g?=?gongyue(a,b);
return?x*y/g;
}
}