OSCC · JavaScript, Toán học, Thuật toán, Đệ quy · 28/12/2020
Tính bội chung nhỏ nhất của hai hay nhiều số
- Sử dụng công thức ước chung lớn nhất [GCD] và thực tế là
function smallestCommons[arr] {
3 để xác định bội số chung nhỏ nhất
let min = Math.min[...arr] let max = Math.max[...arr] let array = []
// Creating a full array of all values in the range for [min; min n % currentValue === 0; let common = false let n = max* [max-1]// Checking whether the first value for n is the lowestCommon Multiple common = array.every[lowestCommon]
//Checking for a true result from the array while [common === false]{
n++ common = array.every[lowestCommon] } return n} - Công thức GCD sử dụng đệ quy
const lcm = [...arr] => { const gcd = [x, y] => [!y ? x : gcd[y, x % y]]; const _lcm = [x, y] => [x * y] / gcd[x, y]; return [...arr].reduce[[a, b] => _lcm[a, b]]; };
Đoạn trích được đề xuất
Tính ước số chung lớn nhất giữa hai hoặc nhiều số/mảng
Tính toán khoảng cách giữa hai điểm trong bất kỳ số chiều nào
Tính giai thừa của một số
Chà, đây là câu chuyện, tất cả về việc sim của tôi bị lộn, đảo lộn như thế nào. Và tôi muốn dành một phút, chỉ cần ngồi ngay đó, tôi sẽ cho bạn biết cách tính các bội số chung trong JavaSript
Vâng không hoạt động tốt lắm. Tuy nhiên, JS cũng vậy khi thực hiện một trong hai điều này so với Ruby. Không cần phải nói thật tốt khi biết cách làm điều đó trong cả hai
Vì vậy, chúng ta hãy tìm hiểu về JS và lấy bội số chung nhỏ nhất, phải không?
Trong trường hợp này, đó là tìm số nhỏ nhất mà tất cả các số trong một phạm vi đã cho đều chia hết cho không có phần dư. e. g với dãy số từ 1 đến 5, bội chung nhỏ nhất là 60. Vì 60 chia hết cho 1,2,3,4 & 5 không dư
Bây giờ không còn cách nào khác, hãy xem mã để biến điều này thành có thể
function smallestCommons[arr] {
let min = Math.min[...arr] let max = Math.max[...arr] let array = []
// Creating a full array of all values in the range for [min; min n % currentValue === 0; let common = false let n = max* [max-1]// Checking whether the first value for n is the lowestCommon Multiple common = array.every[lowestCommon]
//Checking for a true result from the array while [common === false]{
n++ common = array.every[lowestCommon] } return n}
Chúng ta hãy đi qua điều này từng bước một nhé?
Trước tiên, chúng tôi thiết lập một số biến phức tạp đó, vì chúng tôi không biết thứ tự của mảng gồm hai số chúng tôi đã cung cấp, hãy đảm bảo lấy các giá trị tối đa và tối thiểu trong mảng đó thay vì lấy 0 và
môn Toán. max[] và Toán. min[] là hoàn hảo cho việc này và bằng cách sử dụng toán tử trải rộng trên mảng […arr] vì các phương thức không lấy mảng làm đối số, chúng ta có thể sắp xếp nhanh chóng và dễ dàng
let min = Math.min[...arr]let max = Math.max[...arr]let array = []
Chúng tôi cũng muốn tạo một mảng trống đẹp để điền vào tất cả các giá trị giữa tối thiểu và tối đa, lý do đằng sau điều này là để chúng tôi có được điều khá tiện dụng. phương thức mảng every[] mà JS có. Sau đó, chúng tôi điền vào mảng đó ngay bây giờ bằng cách sử dụng vòng lặp for đơn giản
for [min; min n % currentValue === 0;
Bây giờ, khi biết rằng số nhỏ nhất có thể chia hết cho tất cả các số khác có thể là số lớn nhất trong mảng * [chính nó là 1], chúng tôi đặt đó là giá trị thấp nhất cần kiểm tra [đếm hết từ 1 có vẻ như lãng phí
let n = max* [max-1]
Chúng tôi cũng muốn đặt một biến là sai ở đây, ngay khi nó trở thành đúng [nhờ điều gì sẽ xảy ra tiếp theo], nó sẽ ngắt một vòng lặp và trả về cho chúng tôi một số sẽ là câu trả lời của chúng tôi
let common = false
Định nghĩa của mọi phương thức từ Mozilla webdocs như sau
The every[] method tests whether all elements in the array pass the test implemented by the provided function. It returns a Boolean value.
Đây chính xác là những gì chúng tôi muốn, do đó tại sao chúng tôi đã tạo chức năng lowCommon một phút trước. Truyền nó vào mọi phương thức đồng thời tăng n có nghĩa là nó sẽ tiếp tục chạy trong vòng lặp này cho đến khi common === true
Trước khi đến vòng lặp while, chúng ta chỉ cần kiểm tra kỹ xem giá trị ban đầu của chúng ta là n có phải là số chúng ta đang tìm kiếm không
________số 8Bây giờ chúng ta đã thoát khỏi vòng lặp while. Điều này sẽ kiểm tra mỗi khi một giá trị được chuyển vào xem có hay không. phương thức every[] đã thay đổi common thành true. Chúng tôi đảm bảo tăng n trước khi kiểm tra, như thể chúng tôi làm điều đó sau đó, giá trị n của chúng tôi nhiều hơn 1 so với kết quả mong muốn của chúng tôi và điều đó thật ngớ ngẩn
while [common === false]{ n++ common = array.every[lowestCommon]}
Khi common === true vòng lặp dừng lại và n sẽ là mẫu số chung nhỏ nhất của chúng ta và chúng ta tiếp tục và trả về nó. tiếng hoan hô
function smallestCommons[arr] {0
let min = Math.min[...arr] let max = Math.max[...arr] let array = []
// Creating a full array of all values in the range for [min; min n % currentValue === 0; let common = false let n = max* [max-1]// Checking whether the first value for n is the lowestCommon Multiple common = array.every[lowestCommon]
//Checking for a true result from the array while [common === false]{
n++ common = array.every[lowestCommon] } return n}
Bây giờ mọi người tạm dừng, ăn bánh quy và duỗi chân và chúng ta sẽ đi vào chiều sâu của việc thực hiện điều này trong ruby
Tất cả các bạn đã sẵn sàng để quay lại với nó chưa?
Đi nào
let min = Math.min[...arr]let max = Math.max[...arr]let array = []0
Điều đó không đáng yêu sao. Ruby làm rất nhiều việc cho chúng ta
Chắc chắn chúng ta vẫn cần tạo một mảng gồm các giá trị xen kẽ giữa max và min [nhưng bây giờ chúng ta chỉ có thể sử dụng toán tử trải rộng rubys]. Tuy nhiên, lần này chúng ta có thể chỉ cần sử dụng phương thức rút gọn và chuyển vào phương thức bội chung nhỏ nhất tuyệt vời mà ruby có dưới dạng khối
Tôi đã trải rộng phương pháp này để dễ đọc, tuy nhiên nếu chúng ta thích chúng ta có thể rút gọn nó xuống một dòng
let min = Math.min[...arr]let max = Math.max[...arr]let array = []1
Tôi hy vọng điều này đã được hữu ích tất cả
Lần tới tôi nghĩ tôi sẽ tính tổng của tất cả các Số nguyên tố bằng hoặc nhỏ hơn một số đã cho. Nếu bạn muốn thử trong thời gian chờ đợi, hãy tự mình thử