ฉันรู้ว่าอัลกอริทึมของ Euclid เป็นอัลกอริทึมที่ดีที่สุดในการรับ GCD (ตัวหารร่วมมาก) ของรายการจำนวนเต็มบวก แต่ในทางปฏิบัติคุณสามารถเขียนโค้ดอัลกอริทึมนี้ได้หลายวิธี (ในกรณีของฉันฉันตัดสินใจใช้ Java แต่ C / C ++ อาจเป็นตัวเลือกอื่น)
ฉันต้องใช้รหัสที่มีประสิทธิภาพที่สุดเท่าที่จะเป็นไปได้ในโปรแกรมของฉัน
ในโหมดเรียกซ้ำคุณสามารถเขียน:
static long gcd (long a, long b){
    a = Math.abs(a); b = Math.abs(b);
    return (b==0) ? a : gcd(b, a%b);
  }
และในโหมดวนซ้ำดูเหมือนว่า:
static long gcd (long a, long b) {
  long r, i;
  while(b!=0){
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}
นอกจากนี้ยังมีอัลกอริทึมแบบไบนารีสำหรับ GCD ซึ่งอาจมีการเข้ารหัสแบบนี้:
int gcd (int a, int b)
{
    while(b) b ^= a ^= b ^= a %= b;
    return a;
}