Bagaimana Anda menghitung kelipatan angka yang paling umum?
Sejauh ini saya hanya bisa menghitungnya di antara dua angka. Tetapi tidak tahu bagaimana mengembangkannya untuk menghitung 3 angka atau lebih.
Sejauh ini begitulah cara saya melakukannya
LCM = num1 * num2 / gcd ( num1 , num2 )
Dengan gcd adalah fungsi untuk menghitung pembagi umum terbesar untuk angka-angka. Menggunakan algoritma euclidean
Tapi saya tidak tahu bagaimana cara menghitungnya untuk 3 angka atau lebih.
Jawaban:
Anda dapat menghitung LCM lebih dari dua angka dengan secara iteratif menghitung LCM dari dua angka, yaitu
sumber
Dengan Python (modifikasi primes.py ):
Pemakaian:
reduce()
bekerja seperti itu :sumber
t = a; a = b; b = t % b
Berikut ini adalah implementasi gaya ECMA:
sumber
Saya akan memilih yang ini (C #):
Hanya beberapa klarifikasi, karena pada pandangan pertama tidak begitu jelas apa yang dilakukan kode ini:
Agregat adalah metode Ekstensi Linq, jadi Anda tidak bisa lupa menambahkan menggunakan System.Linq ke referensi Anda.
Agregat mendapatkan fungsi terakumulasi sehingga kita dapat menggunakan properti lcm (a, b, c) = lcm (a, lcm (b, c)) melalui IEnumerable. Lebih lanjut tentang Agregat
Perhitungan GCD memanfaatkan algoritma Euclidean .
Perhitungan lcm menggunakan Abs (a * b) / gcd (a, b), lihat Pengurangan oleh pembagi umum terbesar .
Semoga ini membantu,
sumber
Saya baru saja menemukan ini di Haskell:
Saya bahkan meluangkan waktu untuk menulis
gcd
fungsi saya sendiri , hanya untuk menemukannya di Prelude! Banyak pembelajaran untuk saya hari ini: Dsumber
lcm ns = foldr1 lcm' ns
ataulcm = foldr1 lcm'
Integral
yang dinyatakan olehdiv
Beberapa kode Python yang tidak memerlukan fungsi untuk gcd:
Begini tampilannya di terminal:
sumber
Berikut ini adalah satu-baris Python (tidak termasuk impor) untuk mengembalikan LCM dari bilangan bulat dari 1 hingga 20 inklusif:
Python 3.5+ impor:
Impor Python 2.7:
Logika umum:
Perhatikan bahwa di kedua Python 2 dan Python 3 , aturan operator didahulukan menentukan bahwa
*
dan//
operator memiliki prioritas yang sama, dan sehingga mereka berlaku dari kiri ke kanan. Dengan demikian,x*y // z
berarti(x*y) // z
dan tidakx * (y//z)
. Keduanya biasanya menghasilkan hasil yang berbeda. Ini tidak akan jadi masalah bagi divisi float tetapi itu bagi divisi lantai .sumber
Berikut ini adalah porta C # dari implementasi Virgil Disgr4ce:
sumber
Berfungsi untuk menemukan lcm dari daftar angka apa pun:
sumber
Menggunakan LINQ Anda bisa menulis:
Harus menambahkan
using System.Linq;
dan jangan lupa untuk menangani pengecualian ...sumber
Dan versi Scala:
sumber
Ini dia di Swift .
sumber
Anda bisa melakukannya dengan cara lain - Biarkan ada n angka. Ambil sepasang angka berurutan dan simpan lcm di array lain. Melakukan ini pada program iterasi pertama tidak n / 2 iterasi. Kemudian pick up pasangan mulai dari 0 seperti (0,1), (2,3) dan seterusnya. Hitung LCM mereka dan simpan di array lain. Lakukan ini sampai Anda tersisa dengan satu larik. (tidak mungkin menemukan lcm jika n ganjil)
sumber
Dalam R, kita dapat menggunakan fungsi mGCD (x) dan mLCM (x) dari nomor paket , untuk menghitung pembagi umum terbesar dan kelipatan paling umum untuk semua angka dalam vektor integer x bersama-sama:
sumber
Gaya ES6
sumber
gcd(a, b)
tetapigdc
fungsi tersebut mengharapkan array sehingga Anda bermaksud memanggilgcd([a, b])
Hanya untuk bersenang-senang, implementasi shell (hampir semua shell):
coba dengan:
mendapatkan
Input dan hasil terbesar harus kurang dari
(2^63)-1
atau shell shell akan membungkus.sumber
saya sedang mencari elemen array gcd dan lcm dan menemukan solusi yang baik di link berikut.
https://www.hackerrank.com/challenges/between-two-sets/forum
yang mencakup kode berikut. Algoritma untuk gcd menggunakan Algoritma Euclidean yang dijelaskan dengan baik di tautan di bawah ini.
https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/the-euclidean-algorithm
sumber
Berikut ini adalah implementasi PHP :
Kredit pergi ke @ T3db0t dengan jawabannya di atas (kode gaya ECMA) .
sumber
GCD perlu sedikit koreksi untuk angka negatif:
sumber
Bagaimana dengan ini?
sumber
Kami memiliki implementasi kerja Multiple Least Common on Calculla yang berfungsi untuk sejumlah input yang juga menampilkan langkah-langkahnya.
Apa yang kami lakukan adalah:
Dan itu saja - Anda punya cmm Anda.
sumber
LCM bersifat asosiatif dan komutatif.
LCM (a, b, c) = LCM (LCM (a, b), c) = LCM (a, LCM (b, c))
di sini adalah kode sampel dalam C:
sumber
Metode compLCM mengambil vektor dan mengembalikan LCM. Semua angka dalam vektor in_number.
sumber
sumber
Bagi siapa pun yang mencari kode kerja cepat, coba ini:
Saya menulis sebuah fungsi
lcm_n(args, num)
yang menghitung dan mengembalikan lcm dari semua angka dalam arrayargs
. Parameter keduanum
adalah jumlah angka dalam array.Masukkan semua angka-angka itu dalam sebuah array
args
dan kemudian panggil fungsi sepertilcm_n(args,num);
Fungsi ini mengembalikan lcm dari semua angka-angka itu.
Berikut ini adalah implementasi dari fungsinya
lcm_n(args, num)
:Fungsi ini perlu di bawah dua fungsi untuk bekerja. Jadi, tambahkan saja bersama dengannya.
sumber
int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a%b); } int lcm(int[] a, int n) { int res = 1, i; for (i = 0; i < n; i++) { res = res*a[i]/gcd(res, a[i]); } return res; }
sumber
Dengan python:
sumber
Inilah yang saya gunakan -
sumber
untuk python 3:
sumber
Di Ruby, sesederhana itu:
(diuji pada Ruby 2.2.10 dan 2.6.3.)
sumber