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

    最大公约数,根据《编程之美》递归版写的非递归版:

    1. 对于y和x来说,如果y=k*y1, x = k * x1。那么有gcd(y,x)=k*gcd(y1, x1);

    2. 如果x=p*x1, p是素数(质数),并且y%p != 0,那么gcd(x, y) = gcd(p * x1, y) = gcd(x1, y)。

     1 int gcd(int x, int y) {
     2     int a = x, b = y;
     3     int factor = 0;
     4     while (a != 0 && b != 0) {
     5         if (a < b) {
     6             swap(a, b);
     7         }
     8         if (a & 0x01 == 0) {
     9             if (b & 0x01 == 0) {
    10                 b >>= 1;
    11                 factor++;
    12             }     
    13             a >>= 1;
    14         } else {
    15             if (b & 0x01 == 0) {
    16                 b >>= 1;
    17             } else {
    18                 a -= b;
    19             }
    20         }            
    21     }
    22     if (a == 0) return b << factor;
    23     if (b == 0) return a << factor;
    24 }
  • 相关阅读:
    SEUOJ上几道水题
    项目计划
    软件工程03
    件工程个人作业02
    软件工程个人作业01
    学习进度条
    软件工程第一次博客
    异常分析
    多态
    Java覆盖
  • 原文地址:https://www.cnblogs.com/linyx/p/3972581.html
Copyright © 2011-2022 走看看