【JAVA】题目:题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

作者&投稿:雀卸 (若有异议请与网页底部的电邮联系)
【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。~

#include
void main()
{
int m(int x,int y);
int a,b,t,p,q;
printf("请输入两个正整数:
");
scanf("%d,%d",&p,&q);
if (p==q)
{
printf("最大公约数和最小公倍数均为:%d
",p);
}
else if(p<q)
{
t=p;
p=q;
q=t;
a=m(p,q); //调用一个函数
b=p*q/a ; //两个数的乘积等于它们最大公约数和最小公倍数的乘积
printf("最大公约数为:%d
",a);
printf("最小公倍数为:%d
",b);
}
else
{
a=m(p,q); //同上
b=p*q/a;
printf("最大公约数为:%d
",a);
printf("最小公倍数为:%d
",b);
}
}
//用辗转相除法求最大公约数
# include
int m(int x,int y)
{
int z;
while(y!=0)
{
z=x%y;
x=y;
y=z;
}
return(x) ;
}

#include
int main(){
int a,b,num1,num2,temp;
printf("please input two number:
");
scanf("%d%d",&num1,&num2);
if(num1<num2){
temp = num1;
num1 = num2;
num2 = temp;
}
a = num1;
b = num2;
while(b!=0){
temp = a%b;
a=b;
b=temp;
}
printf("gongyueshu:%d
",a);
printf("gongbeishu:%d
",num1*num2/a);
}

扩展资料:
两个整数的最大公约数主要有两种寻找方法:
* 两数各分解质因数,然后取出同样有的质因数乘起来
*辗转相除法(扩展版)
和最小公倍数(lcm)的关系:
gcd(a, b) * lcm(a, b) = ab
a与b有最大公约数,
两个整数的最大公因子可用于计算两数的最小公倍数,或分数化简成最简分数。
两个整数的最大公因子和最小公倍数中存在分配律:
* gcd(a, lcm(b, c)) = lcm(gcd(a, b), gcd(a, c))
* lcm(a, gcd(b, c)) = gcd(lcm(a, b), lcm(a, c))
在坐标里,将点(0, 0)和(a, b)连起来,通过整数坐标的点的数目(除了(0, 0)一点之外)就是gcd(a, b)。

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();
// new 一个类 目的是调用类中的方法 deff
deff cd = new deff();
// 调用类中的方法 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;
// 如果x<y 则将x和y的值互换
if (x < y) {
t = x;
x = y;
y = t;
}

//程序执行到这里 x肯定大于或者等于y

while (y != 0) {
// 如果x和y相等,那么他们的最大公约数是x
if (x == y){
return x;
}
// 当x和y不相等的时候 将y的值赋值给x 将原x的值和y的余数赋值给y
// 这时候x依然大于或者等于y 接着进行下一轮计算
// 一直循环下去,当k为0的时候,x就是最大公约数了
else {
int k = x % y;
x = y;
y = k;
}
}
return x;
}
}

他只是新建了个类 这个deff类里有个deff方法,就是新建deff类的实例,调用这个实例里的方法,你也可以不写这个类,直接在lianxi06这个类里写方法,就像这样:
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();
m = deff(a,b);
int n = a * b / m;
System.out.println("最大公约数: " + m);
System.out.println("最小公倍数: " + n);
}
static 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;
}

}
注意static关键字哦

输入两个正整数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笔试题(java初级考题)
A.Java面向对象语言容许单独的过程与函数存在 B.Java面向对象语言容许单独的方法存在 C.Java语言中的方法属于类中的成员(member)D.Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同 9.下列说法错误的有(BCD)A.能被java.exe成功运行的javaclass文件必须有main方法 B.J2SDK就是JavaAPI...

求以下java题目的答案
1、流是具备连续性和无终态的数据,具体定义可参考数据流 2、根据流向自然区分为输入流和输出流,以ETL系统用例为参考来分类 3、此处不太明白描述的数据具体是指封装数据还是原始数据,通过传感器采集的数据来说有视频流、音频流等,如果是底层数据处理的话参考java.io包,其它语言查阅官方文档。4、Inpu...

java题目,急!
A start() B run() C exit() D getPriority()答案:ABD 2. 下面关于java.lang.Exception类的说法正确的是()A 继承自Throwable      B Serialable      CD 不记得,反正不正确 答案:A 3. 下面程序的运行结果是()String str1 = "hello"...

java经典面试题及答案(java经典面试题附答案)
Java编程常见面试题目,要求正确答案?第一,谈谈final,finally,finalize的区别。Java基础面试题都有哪些?1、自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成double,等等。反之就是自动拆箱。Java支持多继承么?不支持,Java不支持多继承。

高级java面试中经常被问到的问题(高级java面试中经常被问到的问题是什 ...
java面试中经常被问到的问题有如下:简述string对象,StringBuffer、StringBuilder区分。多态的原理。简要描述面向对象编程的思想。反射的原理。java.util包的UML结构图。Vector和ArrayList、LinkedList区别。请你自我介绍一下你自己?回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在...

java面试经典题目(java面试题详解)
Java基础面试题都有哪些? 1.java异常机制的原理与应用\\x0d\\x0a答:每当程序出现异常之后,如果程序没有进行相应的处理,则程序会出现中断现象。手镇\\x0d\\x0a实际上,产生了异常之后,JVM会抛出一个异常类的实例化对象,如果此时使用了try语句捕获的话,则可以进行异常的处理,否则,交给JVM进行处理。当try语句捕获异常...

上海久雅Java面试题
久雅科技面试题 【JAVA软件工程师】1、基本集合类有哪些,各自的特点?集合类型主要有3种:set(集)、list(列表)和map(映射)。List 关心的是索引,与其他集合相比,List特有的就是和索引相关的一些方法:get(int index) 、 add(int index,Object o) 、 indexOf(Object o) 。Set关心唯一性,它不允许重复。Map关心...

java题目:产生10到100之内的随即整数输出,并把10个数按从小到大的顺序...
import java.util.Arrays;public class Test { public static void main(String[] args) { int[] a = new int[10]; Random r = new Random(); for(int i = 0; i < a.length; i++) { a[i] = r.nextInt(91) + 10;\/\/10到100之间的随机数,包含100 } Arrays.sort(a); String result =...

java题目:判断101-200之间有多少个素数,并输出所有素数。 程序报错...
但是在编译期,Java编译器是不具备这种能力的。所以,编译器报错,以保证所有路径都能有一个返回值。忽略其他代码,经过分析:其实for循环是没有必要的。因为只要进入for循环,程序在第一次循环中必会产生返回值。故此处循环只能执行一轮。所以编译器提示 "n++"为"Dead code"(死代码,无用的代码)。参...

java的经典例题
【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。【程序7】 ...

平南县19715713204: 题目:输入两个正整数m和n,求其最大公约数和最小公倍数. (java)1.程序分析:利用辗除法请问,什么是辗除法? -
采软氟罗:[答案] 设两数为a、b(b
平南县19715713204: 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数. -
采软氟罗: #include<stdio.h> void main() { int m(int x,int y); int a,b,t,p,q; printf("请输入两个正整数:\n"); scanf("%d,%d",&p,&q); if (p==q) { printf("最大公约数和最小公倍数均为:%d\n",p); } else if(p<q) { t=p; p=q; q=t; a=m(p,q); //调用一个函数 b...

平南县19715713204: Java编程题:求两个正整数的最大公约数. -
采软氟罗: 再重新定义一个 i,和最大公约数 MaxDivsior 之后把while部分换成:for(int i=b;i>=1;i--) { // 小b的数中第一个能被a和b整除的 if(b%i==0&&a%i==0) { MaxDivsior = i; break; } }

平南县19715713204: JAVA面试题:给定两个正整数数组,返回他们的交集数组,给定的数组是已排序的. -
采软氟罗: String s=""; private int[] main(int[] a,int[] b){ for(int i=0;i<a.length();i++){ for(int k=0;k<b.length();k++){ if(a[i]==b[k]){ s=s+a[i]+" "; } } } Sring[] ss=s.plit(" "); if(ss.length()!=0){ int[] result=new int[ss.length()]; for(int i=0;i<ss.length();i++){ result[i]=...

平南县19715713204: java的经典例题 -
采软氟罗: 【程序1】 题目:古典问题:有一对兔子,从出生后第2个月起每个月都生一对兔子,小兔子长到第2个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素...

平南县19715713204: JAVA基础编程题 -
采软氟罗: package com.qiu.swing.layoutDemo; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame;...

平南县19715713204: 编程题:输入两个正整数m和n,求其最大公约数和最小公倍数 -
采软氟罗: #include int Gcd(int m,int n)/*最大公约数*/{ int t; if(m<n) { t = n,n = m,m = t; } if(n == 0) return m; else return Gcd(...

平南县19715713204: JAVA题目 输入两个实数,按代数值由小到大排列 求代码··· -
采软氟罗: import java.util.Scanner; public class A { public static void main(String[] args) { //在控制台输入两个实数,用空格分开,然后按下回车得到结果 Scanner in=new Scanner(System.in); String input=in.nextLine(); String[] strings=input.split(" "); if(...

平南县19715713204: java问题,输入两个整数,放入到a与b变量中去如果a》=b就将a与b进行交换,否则不交换,目的就是要让a中的小于等于b中的值输出. -
采软氟罗:[答案] 交换的话,其实有三种方法:下面列举出来,你可以选取一种.第一种: 也就是中间值的交换:这里我就直接盗用下一楼的答案拉: public static void main(String[] args){ int a= 2; int b=3; if(a>=...

平南县19715713204: java题:任意输入一个正整数,正序输出它的每一位! -
采软氟罗: Scanner s = new Scanner(System.in); int in = s.nextInt(); String inStr = in+""; for(int i=0;i System.out.println(inSr.charAt(i)); } 这种就是把整数转换为字符串类型,在去对字符串循环输出每一位.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网