最大公约数java
‘壹’ java求2个整数的最大公约数
public
class
CommonDivisor
{
public
static
void
main(String[]
args)
{
int
n1
=
21;
int
n2
=
14;
System.out.println("最大公约数是"
+
fun(n1,
n2));
}
public
static
int
fun(int
n1,
int
n2)
{
int
m
=
1;
if
(n1
<
n2)
{
int
t
=
n1;
n1
=
n2;
n1
=
t;
}
for
(int
i
=
n2;
i
>
1;
i--)
{
if
((n1
%
i
==
0)
&&
(n2
%
i
==
0))
{
return
i;
}
}
return
m;
}
}
//
the
end
‘贰’ java中如何求两个数的最大公约数
求最大公约数:提示用户输入两个正整数,并求出它们的最大公约数。
方法一:(辗转相除法)
设用户输入的两个整数为n1和n2且n1>n2,余数=n1%n2。当余数不为0时,把除数赋给n1做被除数,把余数赋给n2做除数再求得新余数,若还不为0再重复知道余数为0,此时n2就为最大公约数。
例:gcd(20,8)
20=2*8+4
8=2*4 因此gcd(20,8)=4代码实现:
import javax.swing.JOptionPane;public class GreatestCommonDivisor{ public static void main(String[] args){
String num1String = JOptionPane.showInputDialog("Please enter the first integer:"); int num1 = Integer.parseInt(num1String);
String num2String = JOptionPane.showInputDialog("Please enter the second integer:"); int num2 = Integer.parseInt(num2String); if(num1<num2){ int temp=num1;
num1=num2;
num2=temp;
} int remainder = num1%num2; int n1=num1,n2=num2; while(remainder!=0){
num1=num2;
num2=remainder;
remainder=num1%num2;
}
JOptionPane.showMessageDialog(null,String.format("The greatest common divisor for %d and %d is %d.",n1,n2,num2));
}
}方法二:假设输入的两个整数为n1和n2,检查k(k=2,3,4…)是否为n1和n2的最大公约数,直到k大于两个数中较小的一个。
代码实现:
import javax.swing.JOptionPane;public class GreatestCommonDivisor{ public static void main(String[] args){
String num1String = JOptionPane.showInputDialog("Please enter the first integer:"); int num1 = Integer.parseInt(num1String);
String num2String = JOptionPane.showInputDialog("Please enter the second integer:"); int num2 = Integer.parseInt(num2String); int gcd=1,k=1; while(k<=num1 && k<=num2)
{ if(num1%k==0 && num2%k==0)
gcd=k;
k++;
}
JOptionPane.showMessageDialog(null,String.format("The greatest common divisor for %d and %d is %d.",num1,num2,gcd));
}
}
‘叁’ java编写求最大公约数和最小公倍数的程序
输入两个正整数m和n, 求其最大公约数和最小公倍数.
用辗转相除法求最大公约数
算法描述:
m对n求余为a, 若a不等于0
则 m <- n, n <- a, 继续求余
否则 n 为最大公约数
最小公倍数 = 两个数的积 / 最大公约数
#include
int main()
{
int m, n;
int m_cup, n_cup, res; /*被除数, 除数, 余数*/
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;
}
★ 关于辗转相除法, 搜了一下, 在我国古代的《九章算术》中就有记载,现摘录如下:
约分术曰:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”
其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法,实际上就是辗转相除法。
辗转相除法求最大公约数,是一种比较好的方法,比较快。
对于52317和75569两个数,你能迅速地求出它们的最大公约数吗?一般来说你会找一找公共的使因子,这题可麻烦了,不好找,质因子大。
现在教你用辗转相除法来求最大公约数。
先用较大的75569除以52317,得商1,余数23252,再以52317除以23252,得商2,余数是5813,再用23252做被除数,5813做除数,正好除尽得商数4。这样5813就是75569和52317的最大公约数。你要是用分解使因数的办法,肯定找不到。
那么,这辗转相除法为什么能得到最大公约数呢?下面我就给大伙谈谈。
比如说有要求a、b两个整数的最大公约数,a>b,那么我们先用a除以b,得到商8,余数r1:a÷b=q1…r1我们当然也可以把上面这个式子改写成乘法式:a=bq1+r1------l)
如果r1=0,那么b就是a、b的最大公约数3。要是r1≠0,就继续除,用b除以r1,我们也可以有和上面一样的式子:
b=r1q2+r2-------2)
如果余数r2=0,那么r1就是所求的最大公约数3。为什么呢?因为如果2)式变成了b=r1q2,那么b1r1的公约数就一定是a1b的公约数。这是因为一个数能同时除尽b和r1,那么由l)式,就一定能整除a,从而也是a1b的公约数。
反过来,如果一个数d,能同时整除a1b,那么由1)式,也一定能整除r1,从而也有d是b1r1的公约数。
这样,a和b的公约数与b和r1的公约数完全一样,那么这两对的最大公约数也一定相同。那b1r1的最大公约数,在r1=0时,不就是r1吗?所以a和b的最大公约数也是r1了。
有人会说,那r2不等于0怎么办?那当然是继续往下做,用r1除以r2,……直到余数为零为止。
在这种方法里,先做除数的,后一步就成了被除数,这就是辗转相除法名字的来历吧。
‘肆’ 在JAVA中怎么实现求最大公约数和最小公倍数
importjava.util.Scanner;
publicclassGongbei{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
System.out.println("输入第一个数:");
intx=sc.nextInt();
System.out.println("输入第二个数:");
inty=sc.nextInt();
System.out.println("最大公约数:"+gongyue(x,y));
System.out.println("最小公倍数:"+gongbei(x,y));
}
publicstaticintgongyue(intx,inty){//最大公约数
if(x>y){
intt=x;
x=y;
y=t;
}
while(x!=0){
inttemp=y%x;
y=x;
x=temp;
}
returny;
}
publicstaticintgongbei(intx,inty){//最小公倍数
inta=x,b=y;
intg=gongyue(a,b);
returnx*y/g;
}
}
‘伍’ java求最大公约数
最大公约数求的没问题。
求最小公倍数的时候,return (a*b)/m;这句代码中的a和b的值已经在父类代码中被
do {
temp_number = a%b;
a=b;
b=temp_number;
}
修改了,所以最终a*b就是0了。
改正:
class Son extends Father{
int m;
int x;
int y;
Son(int a,int b)
{
x=a;
y=b;
super(a,b);
}
public int f(){
m=super.f();
return (x*y)/m;
}
}
这样应该就行了
‘陆’ Java求最大公约数
publicclassGcd{
publicstaticvoidmain(String[]args){
for(inti=0;i<10;i++){
inta=(int)(Math.random()*99+1);
intb=(int)(Math.random()*99+1);
System.out.println(a+","+b+" => "+getNumber(a,b));
}
}
publicstaticintgetNumber(intm,intn){
if(m%n==0){
returnn;
}
else{
returngetNumber(n,m%n);
}
}
}
‘柒’ 用java求最大公约数
例如:数字m=6,和数字n=8
为了省去相同的求最大公约数的代码,首先对m n进行比较大小
if(m<n)
{int temp=0;
temp=m;
m=n;
n=temp;
}
以上代码将较大的数都设定为m,利用一个temp保留小的数,将m的地址用来保留n的值,然后将n的位置放入temp的值(小的数)。
int r=m%n;
while(r!=0)
{m=n;
n=r;
r=m%n;
}
return n;
意思就是8除以6于2,那r=2,且不等于零,循环开始……
用n的值赋给m,r的值赋给n,即6除以2于0 此时的r为0,循环结束,返回n的值就是2,所以最大公约数就是2;
详细代码请点下面连接
http://hi..com/hsf521024/blog/item/6e5215a63217989cd14358c1.html
‘捌’ java最大公约数算法
//求最大公约数:较大的数除以较小的数,然后将较小的数作为下一次的大数,余数作为小数,直到较小的数为0,返回较大的数
public static int big(int num1,int num2){
int big = 0;
int small = 0;
if(num1>num2){
big = num1;
small = num2;
}else{
big = num2;
small = num1;
}
if(small==0){
System.out.println("除数不能为0");
return 0;
}
while(true){
if(small==0){
return big;
}else{
int temp = big;
big = small;
small = temp%small;
}
}
}
‘玖’ 用Java语言求m,n的最大公约数,三种方法
1.从1开始循环。分别求出m、n的约数。找出最大公约数。
2.判断m、n的大小,从较小的开始循环,每次减一,判断是否为公约数。如果是,则为最大公约数,break;
3.2反过来,从小到大循环,找最大的。
公约数判断:
m%i=0&&n/i=0。
举第二个例子:
public
class
Test
{
public
static
int
getN(int
m,int
n){
int
i
=
m>n?n:m;
for(;i>0;i--){
if(m%i==0&&n%i==0){
System.out.println("m、n的最大公约数为"+i);
break;
}
}
return
i;
}
public
static
void
main(String[]
args)
{
System.out.println(getN(100,
88));
}
}
‘拾’ 用java求两数的最大公约数和最小公倍数。
import java.util.*;
public class lianxi06 {
public static void main(String[] args) {
int a ,b,m;
Scanner s = new Scanner(System.in);
System.out.print( "键入一个整数: ");
a = s.nextInt();
System.out.print( "再键入一个整数: ");
b = s.nextInt();
deff cd = new deff();
m = cd.deff(a,b);
int n = a * b / m;
System.out.println("最大公约数: " + m);
System.out.println("最小公倍数: " + n);
}
}
class deff{
public int deff(int x, int y) {
int t;
if(x < y) {
t = x;
x = y;
y = t;
}
while(y != 0) {
if(x == y) return x;
else {
int k = x % y;
x = y;
y = k;
}
}
return x;
}
}