public?class?Gcd?{
創(chuàng)新互聯(lián)建站是專業(yè)的金華網(wǎng)站建設(shè)公司,金華接單;提供成都做網(wǎng)站、網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行金華網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
public?static?void?main(String[]?args)?{
for(int?i=0;i10;i++)?{
int?a=(int)(Math.random()*99+1);
int?b=(int)(Math.random()*99+1);
System.out.println(a+","+b+"\t=\t"+getNumber(a,b));
}
}
public?static?int?getNumber(int?m,int?n){
if?(m?%?n?==?0)?{
return?n;
}
else?{
return?getNumber(n,m?%?n);
}
}
}
自然語(yǔ)言描述計(jì)算兩個(gè)非負(fù)整數(shù)p 和q 的最大公約數(shù):若q 是0,則最大公約數(shù)為p。否則,將p 除以q 得到余數(shù)r,p 和q 的最大公約數(shù)即為q 和r 的最大公約數(shù)。Java code 求公約數(shù)
public static int gcd(int p, int q){ if (q == 0) return p; int r = p % q; return gcd(q, r);}
public static int g(int p, int q){ return p*q/gcd(q, r);}
import?java.util.Scanner;
public?class?Test?{
public?static?void?main(String[]?args)?{
System.out.println("輸入兩個(gè)數(shù):");
Scanner?scan?=?new?Scanner(System.in);
int?a?=?scan.nextInt();
int?b?=?scan.nextInt();
int?m,n,t;
if(ab)?{
m?=?a;
n?=?b;
}?else?{
m?=?b;
n?=?a;
}
while(m%n?!=?0){
t?=?m%n;
m?=?n;
n?=?t;?????
}
System.out.println("最大公約數(shù)為:"+n);
}
}
這個(gè)你用遞歸的方法啊。
while(a%b!=0)
{
a=Math.max(a%b,b);
b=Math.min(a%b,b);
}
這個(gè)一段代碼不對(duì)啊。而且顯然a%b比b小嘛。何必要max。min呢?你直接賦值肯定不對(duì)。要跟上面一樣。來(lái)個(gè)中間值大小換一下。
遞歸方法如下:
public
static
void
main(String[]
args)
{
int
a,b,answer;
Scanner
in=new
Scanner(System.in);
a=in.nextInt();
b=in.nextInt();
if(ab)
{
answer=test(a,b);
}else{
answer=test(b,a);
}
System.out.println("最大公約數(shù)是:"+answer);
}
private
static
int
test(int
a,
int
b)
{
//
TODO
Auto-generated
method
stub
if(a%b==0){
return
b;
}else{
return
test(b,a%b);
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class gongyueshu {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 0;
?System.out.print("請(qǐng)輸入m:");
?BufferedReader strin=new BufferedReader(new InputStreamReader(System.in));
?try {
a=Integer.parseInt(strin.readLine());
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int b = 0;
?System.out.print("請(qǐng)輸入一個(gè)n:");
?BufferedReader strin2=new BufferedReader(new InputStreamReader(System.in));
?try {
b=Integer.parseInt(strin2.readLine());
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int flag = 0;
for (int i = 1; i = a; i++) {
if(a%i==0){
if(b%i==0){
flag=i;}
}
}
System.out.println("最大公約數(shù)為"+flag);
}
}
恩,這樣就妥了,萬(wàn)望采納呀
輸入兩個(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)歷吧。
分享文章:計(jì)算公約數(shù)java代碼,最大公約數(shù)代碼java
網(wǎng)頁(yè)網(wǎng)址:http://jinyejixie.com/article30/hsihso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、、網(wǎng)頁(yè)設(shè)計(jì)公司、Google、網(wǎng)站導(dǎo)航、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
移動(dòng)網(wǎng)站建設(shè)知識(shí)