zoukankan      html  css  js  c++  java
  • 最小公倍数和最大公约数

    最近做到一个 分核桃的题。原题描述如下,就是一个求最小公倍数的题。这个知识点已经忘了。。就去百度查了一下,就有了这一篇总结。

    这个是百度上的定义。

    另外一个很重要的点 就是:最小公倍数=x*y/最大公约数;所以重点就转到了求最大公约数上。最大公约数可以用以下三种方法:辗转相除法,更相折损法(相减法),穷举法。代码如下。

     1 import java.util.Scanner;
     2 
     3 
     4 public class 最小公倍数{
     5     public static void main(String[] args) {
     6         Scanner in = new Scanner(System.in);
     7         System.out.print("input x :");
     8         int x = in.nextInt();
     9         System.out.print("input y :");
    10         int y = in.nextInt();
    11         
    12         int z = Method(x,y);
    13         System.out.println("辗转相除法:");
    14         System.out.println("divisor : "+z);
    15         System.out.println("multiple : "+(x*y/z));
    16         
    17         System.out.println("相减法:");
    18         z = Subtraction(x,y);
    19         System.out.println("divisor : "+z);
    20         System.out.println("multiple : "+(x*y/z));
    21         
    22         System.out.println("穷举法:");
    23         z = divisor(x,y);
    24         System.out.println("divisor : "+divisor(x,y));
    25         z=multiple(x,y);
    26         System.out.println("multiple : "+multiple(x,y));
    27     }
    28     
    29     //辗转相除法:返回公约数
    30     public static int Method(int x,int y){
    31         int a,b,c;
    32         a=x;
    33         b=y;
    34         while(b!=0){
    35             c=a%b;
    36             a=b;
    37             b=c;
    38         }
    39         return a;
    40     }
    41     //相减法
    42     public static int Subtraction(int x,int y){
    43         while(x!=y){
    44             if(x>y){
    45                 x=x-y;
    46             }
    47             else{
    48                 y=y-x;
    49             }
    50         }
    51         return x;
    52     }
    53     //穷举法  求公约数
    54     public static int divisor(int x,int y){
    55         int z;
    56         for(z=x;z>0;z--){
    57             if(x%z==0&&y%z==0){
    58                 break;
    59             }
    60         }
    61         return z;
    62     }
    63     //求公倍数
    64     public static int multiple(int x,int y){
    65         int z;
    66         for(z=x;;z++){
    67             if(z%x==0&&z%y==0){
    68                 break;
    69             }
    70         }
    71         return z;
    72     }
    73     
    74 }

    回到分核桃的题,因为是三个数,所以我用了穷举法求,其实用穷举就不用求公约数了直接公倍数就好。代码如下:

     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 public class 核桃数量 {
     5     public static int ICD(int a,int b,int c){
     6         int k=getMax(a,b,c);
     7         for(int i=k;;i++){
     8             if(i%a==0 && i%b==0 && i%c==0){
     9                 return i;
    10             }
    11         }
    12         
    13     }
    14     public static int getMax(int a,int b,int c){
    15         int aa[]={a,b,c};
    16         Arrays.sort(aa);
    17         return aa[2];
    18     }
    19     public static void main(String[] args) {
    20         Scanner sc=new Scanner(System.in);        
    21         int a=sc.nextInt();
    22         int b=sc.nextInt();
    23         int c=sc.nextInt();
    24         System.out.println(ICD(a,b,c));
    25     }
    26 
    27 }

    然后看笔记上之前还有写段关于最大的最小公倍数:

    1.大于1的两个相邻自然数必定互质=》公约数只有1的两个整数。

    2.两个数的最小公倍数在最大情况就是当两个数互质时候,即为两数的乘积。

    3/31修改内容!!!!

    刚刚写BigInteger发现有 gcd函数。

    BigInteger a=new BigInteger("12");
    BigInteger b=new BigInteger("60");
    System.out.println(a.gcd(b));
  • 相关阅读:
    [转]C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现
    C#设置System.Net.ServicePointManager.DefaultConnectionLimit,突破Http协议的并发连接数限制
    [转]WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
    [转]C#打印DataGridView的例子源码
    c# TreeView 父节点选中/不选时子节点都同步选中/不选
    C#中PictureBox异步加载图片
    [转]FusionCharts 3.1 破解版 – 非常好用的Flash图表控件
    配合JavaScript拖动页面中控件
    在ThinkPad T400上安装win2003 所遇问题
    C# 抛弃MoveTo来实现文件重命名
  • 原文地址:https://www.cnblogs.com/ShallByeBye/p/8542183.html
Copyright © 2011-2022 走看看