求两个自然数m和n的最大公约数。

连续整除检测:

1. t=min{m,n};

2. m除以t,如果余数为0,则执行步骤3,否则,执行步骤4;

3. n除以t,如果余数为0,返回t的值作为结果,否则,执行步骤4;

4. t=t-1,转第2步;

例如,要计算gcd(66,12),首先令t=12,因为66除以12余数不为0,将t减1,而12除以11余数不为0,再将t减1,重复上述过程,直到t=6,此时12除以6的余数为0并且66除以6的余数为0,则gcd(66,11)=6

GreatestCommonDivisor1.java                                             //连续整除

import java.util.*;

public class GreatestCommonDivisor1

{

public static void main(String[] args)

{

/**

*从键盘输入要求的两个整数:m和n

*/

Scanner in=new Scanner(System.in);

System.out.println("Please input two integers, m and n: ");

int m=in.nextInt();

int n=in.nextInt();

double startTime=System.currentTimeMillis();//starttime

/**

*求解最大公约数

*/

int t=m

while(m%t!=0 || n%t!=0)

{

t=t-1;

}

double endTime=System.currentTimeMillis();//endtime

/**

*打印输出最后求出的结果和程序用的时间

*/

System.out.println("The greatest common divisor is ,gcd(m,n)="+t);

System.out.println("Basic Statements take "+(endTime-startTime)+" milliseconds!");

}

}

********************************************************************************************************************************************************

欧几里得算法:

1. r = m % n;

2.循环直到r等于0

2.1 m = n;

2.2 n = r;

2.3 r = m % n;

3.输出n ;

例如,要计算gcd(66,12),因为66除以12的余数为6再将12除以6,余数为0 ,则gcd(66,12)=6。

GreatestCommonDivisor2.java                                    //欧几里得算法

import java.util.*;

public class GreatestCommonDivisor2

{

public static void main(String[] args)

{

/**

*从键盘输入要求的两个整数:m和n

*/

Scanner in=new Scanner(System.in);

System.out.println("Please input two integers,m and n: " );

int m=in.nextInt();

int n=in.nextInt();

int r=m%n;

double startTime=System.currentTimeMillis();

/**

*求解最大公约数

*/

while(r!=0)

{

m=n;

n=r;

r=m%n;

}

double endTime=System.currentTimeMillis();

/**

*打印输出最后求出的结果和程序用的时间

*/

System.out.println("The greatest common divisor is, gcd(m,n)="+n);

System.out.println("Basic Statements take "+(endTime-startTime)+" milliseconds!");

}

}

*********************************************************************************************************************************************************

分解质因数:

1.将m分解质因数;

2.将n分解质因数;

3.提取m和n中的公共质因数相乘;

4.将m和n中的公共质因数相乘,乘积作为结果输出;

例如,要计算gcd(66,12),首先分解质因数66=2*3*11, 12=2*2*3,然后提取两者的公共质因数2*3,则gcd(66,12)=2*3=6。

GreatestCommonDivisor3.java                                            //分解质因数算法

import java.util.*;

public class GreatestCommonDivisor3

{

public static void main(String[] args)

{

Scanner in=new Scanner(System.in);

System.out.println("Please input two integers,m and n: ");

int m=in.nextInt();

int n=in.nextInt();

double startTime=System.currentTimeMillis();

/**

*将m分解质因数,因子存放在Integer类型的数组maa(由泛型数组列表ma转换而来)中

*/

ArrayList ma=new ArrayList();

for(int i=2;i<=m;i++)

{

while(m!=i)

{

if(m%i==0)

{

ma.add(i);;

m=m/i;

}

else break;

}

}

ma.add(m);

Integer[] maa=new Integer[ma.size()];

ma.toArray(maa);

/**

*将n分解质因数,因子存放在Integer类型的数组naa(由泛型数组列表na转换而来)中

*/

ArrayList na=new ArrayList();

for(int i=2;i<=n;i++)

{

while(n!=i)

{

if(n%i==0)

{

na.add(i);;

n=n/i;

}

else break;

}

}

na.add(n);

Integer[] naa=new Integer[na.size()];

na.toArray(naa);

/**

*比较两个数m和n的质因数,提取公共的质因子,存放到Integer类型数组ga(由泛型数组列表g转换而来)中

*/

ArrayList g=new ArrayList();

for(int i=0;i

{

int j=0;

do

{

if(maa[i]==naa[j])

{

g.add(maa[i]);

ma.remove(i);

ma.toArray(maa);

}

j++;

}

while(j

}

Integer[] ga=new Integer[g.size()];

g.toArray(ga);

double endTime=System.currentTimeMillis();

/**

*用存放在ga中的公共质因子相乘得到m和n的最大公约数gcd,并打印显示出来

*/

int gcd=1;

for(int i=0;i

gcd*=ga[i];

System.out.println("The greatest common divisor is,gcd(m,n)= "+gcd);

System.out.println("Basic statements take "+(endTime-startTime)+" milliseconds!");

}

}

java 求最大公因数_三种算法求最大公约数——Java实现 | 学步园相关推荐

  1. 求最大公因数的三种算法及简要说明

    求最大公因数的三种算法及简要说明 1.连续整数法 从给定的最小的数开始按1递减,直至找到一个能被两者都整除的数. public static int gcd1(int x, int y){int mi ...

  2. 三位数求最大公因数c语言,求最大公因数的三种算法

    欧几里得算法 #include using namespace std; int fun(int a, int b){ if (a >= b){ int r = a%b; if (r == 0) ...

  3. 求最大公因数的三种算法

    欧几里得算法 #include<iostream> using namespace std;int fun(int a, int b){if (a >= b){int r = a%b ...

  4. c语言 最大公约数 最小公倍数的编程,C语言三种算法求解最大公约数与最小公倍数...

    C语言三种算法求解最大公约数与最小公倍数 最大公约数与最小公倍数的求解是很多初学C的人所面临的一道问题.当然这道问题并不难解答,也有很多人已经写过相关的博客,我在此书写此篇博客,一是为了让自己能够夯实 ...

  5. 三种算法求两个正整数的最大公约数和最小公倍数;求三个数的最大公约数和最小公倍数

    第二次作业 题目:求两个正整数的最大公约数和最小公倍数. 基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出. 提高要求:1.三种以上算法解决两个正整 ...

  6. 求最大公因数的几种算法

    我们经常会遇到有关数论的题目,求解最大公因数便是常见的题目之一,以下为几种常见的方法,他们的主要结构均为递归 (1)辗转相除法 这便是著名的欧几里得算法 Euclid规则:如果x和y是正整数,且有x& ...

  7. java jar 打印_三种Java打印PDF文档的实例代码

    以下内容归纳了通过Java程序打印PDF文档时的3种情形.即: 1 静默打印 2 显示打印对话框打印 3 打印PDF时自定义纸张大小 使用工具:Spire.PDF for Java Jar文件获取及导 ...

  8. 三种算法求解最大公约数和最小公倍数

    1.穷举法 穷举法的基本思想是:根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕.若某个情况验证符合题目的全部条件,则为本问题的一个解:若全部情况验证后 ...

  9. 求最大和 java_三种算法求最大子段和问题——Java实现

    给定由n个整数组成的序列(a1, a2, -, an),求该序列的子段和的最大值,当所有整数均为负整数时,其最大子段和为0. LargestSubsegmentSum1.java //蛮力算法 imp ...

最新文章

  1. 2021年大数据常用语言Scala(三十八):scala高级用法 隐式转换和隐式参数
  2. Windows 开机自启Web服务
  3. qq讨论组显示连接服务器异常,QQ讨论组出现大面积故障 腾讯回应:因服务器异常 已紧急修复...
  4. 深度案例 | 中商惠民:如何用数据洞察商超需求 重塑高效流通链
  5. 伪静态php配置,PHP开启伪静态配置
  6. 游戏详细设计说明书_宜家的说明书设计脑洞太大了!
  7. 在IBM服务器安装Windows server 2012的心得
  8. 键盘按下某键 停止运行java_Java:按下“Q”键后终止while循环
  9. php mysql商品数量购买减少_PHP+Redis+MySQL商品秒杀与超卖讲解
  10. wps vba宏插件_wps下载_wps下载免费完整版客户端[办公软件]
  11. python爬虫爬取博客_Python爬虫抓取csdn博客
  12. 【荐】卓有成效的管理者
  13. m3u8视频格式转换
  14. Windows 10快速删除大量回收站文件以及由此引起的回收站右键清空反应慢问题的解决
  15. Android,SharedPreferences的使用
  16. 【100 种语言速成】第 2 节:Emojicode
  17. STM32单片机点亮流水灯
  18. 计算机课程收获ppt模板,大学计算机实验心得收获.ppt
  19. vlan的基本指令_思科VLAN的基本配置命令
  20. CF14E Camels(暴力dp || 优化dp)

热门文章

  1. Copying DNA
  2. 机器学习中常见的几种归一化方法以及原因
  3. IPv6双栈技术方案
  4. 高德地图marker事件监听-高德地图marker绑定事件就执行了[解决立即执行]
  5. S7-1200 PLC 激活系统时钟存储位后,相应的位没有工作?
  6. 网页通过url传递数据
  7. 板块分析:筑底阶段 智能家居开启蓝海
  8. 我们是一个团结、有力、强大的团队
  9. 2020年最烂密码出炉!一秒钟就破解!
  10. 在网易做游戏美术设计师是种什么体验?