public?class?Gcd?{
public?static?void?main(String[]?args)?{
for(int?i=0;i10;i++)?{
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);
自然语言描述计算两个非负整数p 和q 的最大公约数:若q 是0,则最大公约数为p.否则,将p 除以q 得到余数r,p 和q 的最大公约数即为q 和r 的最大公约数.Java code 求公约数
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?{
System.out.println("输入两个数:");
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("最大公约数为:"+n);
这个你用递归的方法啊.
while(a%b!=0)
{
a=Math.max(a%b,b);
b=Math.min(a%b,b);
这个一段代码不对啊.而且显然a%b比b小嘛.何必要max.min呢?你直接赋值肯定不对.要跟上面一样.来个中间值大小换一下.
递归方法如下:
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("最大公约数是:"+answer);
private
test(int
a,
b)
//
TODO
Auto-generated
method
stub
if(a%b==0){
return
b;
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("请输入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) {
int b = 0;
System.out.print("请输入一个n:");
int flag = 0;
for (int i = 1; i = a; i++) {
if(a%i==0){
if(b%i==0){
flag=i;}
System.out.println("最大公约数为"+flag);
恩,这样就妥了,万望采纳呀
输入两个正整数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;
printf("Lease common multiple : %d\n", m * n / n_cup);
else printf("Error!\n");
return 0;
★ 关于辗转相除法, 搜了一下, 在我国古代的<<九章算术>>中就有记载,现摘录如下:
约分术曰:"可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也.以等数约之."
其中所说的"等数",就是最大公约数.求"等数"的办法是"更相减损"法,实际上就是辗转相除法.
辗转相除法求最大公约数,是一种比较好的方法,比较快.
现在教你用辗转相除法来求最大公约数.
那么,这辗转相除法为什么能得到最大公约数呢?下面我就给大伙谈谈.
反过来,如果一个数d,能同时整除a1b,那么由1)式,也一定能整除r1,从而也有d是b1r1的公约数.
这样,a和b的公约数与b和r1的公约数完全一样,那么这两对的最大公约数也一定相同.那b1r1的最大公约数,在r1=0时,不就是r1吗?所以a和b的最大公约数也是r1了.
在这种方法里,先做除数的,后一步就成了被除数,这就是辗转相除法名字的来历吧.
以上就是土嘎嘎小编为大家整理的计算公约数java代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!