Java作业——求最大公约数——更相减损术

虽然算法简单,但是因为很不熟练,所以一开始的代码有较多错误,以下是经过多次修改后的代码。

代码:

import java.util.Scanner;public class subsubAlgorithm {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入两个数字:");int a = sc.nextInt();int b = sc.nextInt();subsub(a, b);
//        if(a % 2 == 0) { a = a / 2; }
//        if(b % 2 == 0) { b = b / 2; }}public static void subsub(int a, int b) {int i = 0;int c = 0;for(; a%2 == 0 && b % 2 == 0; i ++) {a = a / 2;b = b / 2;}        //更相减损术第一步:若二者为偶数,则除2,并记录被2除的次数while(a != b) {if(a > b) {a -= b;} else {b -= a;}}        //主体,大数减小数,循环,直到两数相等为止if(i != 0) {c = b * i * 2;}else {c = b;}        //增加了条件判断,防止i==0的情况出现,从而得出公约数为0的错误结果System.out.println("最大公约数 = " + c);}
}

本代码验证了:

a = 996, b = 700

a = 1995, b = 615

a = 81, b = 999

等情况,似乎均可得出正确结果。但是算法仍不完美,欢迎验证并告诉我。

更相减损术——Java实现相关推荐

  1. 更相减损法java,五十6、从高中碾转相除法、更相减损术算法谈起

    「@Author:Runsen」git ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」github ❞ 先问大家一个小学问题:「如何求两个整 ...

  2. 更相减损法java,五十六、从高中碾转相除法、更相减损术算法谈起

    「@Author:Runsen」❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」❞ 先问你们一个小学问题:「如何求两个整数的最大公约数?」 曾 ...

  3. 更相减损法java代码_Python基于更相减损术实现求解最大公约数的方法

    本文实例讲述了Python基于更相减损术实现求解最大公约数的方法.分享给大家供大家参考,具体如下: 先从网上摘录一段算法的描述如下: 更相减损法:也叫 更相减损术,是出自< 九章算术>的一 ...

  4. 使用更相减损术求最大公约数

    package cn.com.test3;import java.util.Scanner;/** 使用更相减损术求最大公约数* 第一步:任意给定两个正整数:判断它们是否都是偶数.若是,则用2约简:若 ...

  5. 初等数论--整除--欧几里得算法/辗转相除法/更相减损术

    初等数论--整除--欧几里得算法/辗转相除法/更相减损术 欧几里得算法/辗转相除法/更相减损术 博主本人是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找 ...

  6. 五十六、从高中碾转相除法、更相减损术算法谈起

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题代码化. ---- Runsen 先问你们一个小学问题:如何求两个整数的最大公约数? 曾经见过不少的算法题 ...

  7. jzoj3793,P2090-数字对【更相减损术,欧几里得算法,数论】

    正题 题目链接: https://www.luogu.org/problemnew/show/P2090 大意 一个数对(a,b),每次可以变为(a+b,b)或(a,a+b).然后要求一个数对中有n求 ...

  8. 《九章算术》中更相减损术----求最大公约数

    更相减损法:也叫更相减损术,是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合. #include<stdio.h> in ...

  9. Python使用更相减损术计算两个整数的最大公约数

    更相减损术是<九章算术>中给出的一种用于约分的方法,也可以用来计算最大公约数,其步骤为: 1)如果两个整数都是偶数,就使用2约简,直到两个整数不再都是偶数,然后执行第2步.如果两个整数不都 ...

最新文章

  1. [BZOJ3998][TJOI2015]弦论
  2. 利用ASP.NET2.0向导控件一步步建立与用户的交互--------提高和自定义用户体验
  3. Echarts加载地图的三种方式
  4. C语言模块化编程的例子
  5. python观察日志(part11)--管道及MD5文件比较
  6. PAT 1074. Reversing Linked List (25)
  7. Java BigInteger类| 带示例的shiftLeft()方法
  8. 软考信息系统项目管理师_信息系统安全管理---软考高级之信息系统项目管理师026
  9. 初探 performance – 监控网页与程序性能
  10. Web存储—localStorage存储
  11. PAT 乙级 1037. 在霍格沃茨找零钱(20)Java版
  12. php安装sphinx扩展,安装php的sphinx扩展模块
  13. QT、C++面试中的几个问题
  14. 机器学习数学基础(1)-回归、梯度下降
  15. STC15单片机——定时/计数器2、3、4
  16. 百度K站“漏洞”被发现,如何预防被百度人工K站
  17. python dictionary怎么用_python Dictionary字典使用
  18. 不同RAID硬盘利用率参考
  19. 关于高精度交流恒流源设计是怎样的?
  20. angular学习笔记(十四)-$watch(3)

热门文章

  1. 【力扣·每日一题】913. 猫和老鼠(C++ 记忆化搜索 博弈)
  2. Java的poi导出的excel不能超过256列的解决办法
  3. java jit 编译器,[Java Performance] JIT编译器简介
  4. 基于halcon的简易二维码识别
  5. 理工科的人写文章也是非常好的
  6. 转义分为escapeHTML和unescapeHTML,先看两个函数的实现。
  7. mobox 企业云盘 文档管理
  8. 【mobox5】的模块化方法,自动导入模块化;
  9. unity +vive(设备)+steam vr(软件)(第一天)
  10. HDLbits 学习笔记: Problem 109 - Left/right arithmetic shift by 1 or 8