Hướng dẫn find divisors of a number javascript - tìm ước của một số javascript

Một số nhận xét chung:

  • Các biến nên được khai báo rõ ràng với var, nếu không bạn tạo một biến toàn cầu.
  • Lượng thụt lại khác nhau giữa cấp độ đầu tiên và cấp độ sâu hơn.
  • Khoảng cách không nhất quán: while [ so với
    function[n]{
        var arr = [],
            finalSum;
    
        if[n  16]{
           return false ;   
       }
       for[var i = 0; i < n; i++]{
           var tmp= n/2;
           arr.push[tmp]    
           // i need to keep on dividing n but i can't get the way of how to
       }
      return finalSum;
    }
    
    0. Nói chung tôi sẽ chèn một không gian ít nhất là sau các từ khóa và xung quanh dấu ngoặc đơn/niềng răng, v.v.

Việc thực hiện của bạn là chính xác nhưng không hiệu quả, vì số lần lặp vòng lặp và hoạt động còn lại bằng với số đầu vào.

Số lượng các ước số có thể được tính toán hiệu quả từ hệ số số nguyên tố: nếu $$ n = p_1^{e_1} \, p_2^{e_2} \ cdots p_k^{e_k} $$ là yếu tố của \ $ n \ $ vào Số nguyên tố \ $ p_i \ $ với số mũ \ $ e_i \ $, sau đó $$ \ sigma_0 [n] = [e_1+1] [e_2+1] $ n \ $, xem ví dụ Wikipedia: Hàm chia. Ví dụ: $$ 720 = 2^4 \ cdot 3^2 \ cdot 5^1 \ longrightarrow \ sigma_0 [720] = [4+1] [2+1] [1+1] = 30 \,. $$

Một triển khai trong JavaScript sẽ là

function getDivisorsCnt[n]{

    var numDivisors = 1;
    var factor = 2; // Candidate for prime factor of `n`

    // If `n` is not a prime number then it must have one factor
    // which is [...Array[n+1].keys[]].slice[1]
   .reduce[[s, a]=>s+[![n % a] && a], 0];

console.log[divisors[12]];

JSfiddle: //jsfiddle.net/32n5jdnb/141/

Explaining:

  • function[n]{
        var arr = [],
            finalSum;
    
        if[n  16]{
           return false ;   
       }
       for[var i = 0; i < n; i++]{
           var tmp= n/2;
           arr.push[tmp]    
           // i need to keep on dividing n but i can't get the way of how to
       }
      return finalSum;
    }
    
    2 Đây là một hàm mũi tên, tương đương với hàm [n] {. Bạn không cần [] nếu chỉ có một tham số.
  • function[n]{
        var arr = [],
            finalSum;
    
        if[n  16]{
           return false ;   
       }
       for[var i = 0; i < n; i++]{
           var tmp= n/2;
           arr.push[tmp]    
           // i need to keep on dividing n but i can't get the way of how to
       }
      return finalSum;
    }
    
    3 tạo ra một mảng trống gồm các phần tử N+1
  • function[n]{
        var arr = [],
            finalSum;
    
        if[n  16]{
           return false ;   
       }
       for[var i = 0; i < n; i++]{
           var tmp= n/2;
           arr.push[tmp]    
           // i need to keep on dividing n but i can't get the way of how to
       }
      return finalSum;
    }
    
    4 Nhận các phím của mảng trống [các chỉ mục, tức là 0, 1, 2] vì vậy đây là một cách để tạo một chuỗi số
  • function[n]{
        var arr = [],
            finalSum;
    
        if[n  16]{
           return false ;   
       }
       for[var i = 0; i < n; i++]{
           var tmp= n/2;
           arr.push[tmp]    
           // i need to keep on dividing n but i can't get the way of how to
       }
      return finalSum;
    }
    
    5 sử dụng toán tử lây lan [...] để chuyển đổi trình lặp trong một mảng khác để tạo một mảng với chuỗi số
  • function[n]{
        var arr = [],
            finalSum;
    
        if[n  16]{
           return false ;   
       }
       for[var i = 0; i < n; i++]{
           var tmp= n/2;
           arr.push[tmp]    
           // i need to keep on dividing n but i can't get the way of how to
       }
      return finalSum;
    }
    
    6 loại bỏ phần tử đầu tiên do đó tạo ra một chuỗi bắt đầu bằng 1. Ghi nhớ N+1?
  • function[n]{
        var arr = [],
            finalSum;
    
        if[n  16]{
           return false ;   
       }
       for[var i = 0; i < n; i++]{
           var tmp= n/2;
           arr.push[tmp]    
           // i need to keep on dividing n but i can't get the way of how to
       }
      return finalSum;
    }
    
    7 là một phương thức lặp lại mặc dù mỗi phần tử và tính toán một giá trị để giảm mảng xuống một giá trị. Nó nhận được là tham số một hàm gọi lại để tính giá trị và giá trị ban đầu của tính toán
  • function[n]{
        var arr = [],
            finalSum;
    
        if[n  16]{
           return false ;   
       }
       for[var i = 0; i < n; i++]{
           var tmp= n/2;
           arr.push[tmp]    
           // i need to keep on dividing n but i can't get the way of how to
       }
      return finalSum;
    }
    
    8 là chức năng gọi lại để giảm. Đó là một hàm mũi tên tương đương với hàm [s, a] {
  • function[n]{
        var arr = [],
            finalSum;
    
        if[n  16]{
           return false ;   
       }
       for[var i = 0; i < n; i++]{
           var tmp= n/2;
           arr.push[tmp]    
           // i need to keep on dividing n but i can't get the way of how to
       }
      return finalSum;
    }
    
    9 là tính toán giá trị.
  • var divisors = n=>[...Array[n+1].keys[]].slice[1]
       .reduce[[s, a]=>s+[![n % a] && a], 0];
    
    console.log[divisors[12]];
    0 s [cho tổng] hoặc giá trị cuối cùng được tính toán +
  • var divisors = n=>[...Array[n+1].keys[]].slice[1]
       .reduce[[s, a]=>s+[![n % a] && a], 0];
    
    console.log[divisors[12]];
    1 Điều này trả về chỉ đúng cho các phần tử có giá trị 0 là mô -đun.
  • var divisors = n=>[...Array[n+1].keys[]].slice[1]
       .reduce[[s, a]=>s+[![n % a] && a], 0];
    
    console.log[divisors[12]];
    2 là một trò lừa 'của JS. Trường hợp là các biểu thức boolean trong javascript không trả về đúng hoặc sai. Họ trả lại giá trị 'sự thật' hoặc 'giả' sau đó được chuyển đổi thành Boolean. Vì vậy, giá trị trả về thực tế là giá trị phù hợp cho && [xem xét cả hai phải là sự thật] và giá trị thuthy đầu tiên được tìm thấy cho || [Chỉ xem xét một người cần phải là sự thật]. Vì vậy, điều này về cơ bản có nghĩa là: nếu
    var divisors = n=>[...Array[n+1].keys[]].slice[1]
       .reduce[[s, a]=>s+[![n % a] && a], 0];
    
    console.log[divisors[12]];
    3 là giá trị mô -đun [nghĩa là! = 0] trả về
    var divisors = n=>[...Array[n+1].keys[]].slice[1]
       .reduce[[s, a]=>s+[![n % a] && a], 0];
    
    console.log[divisors[12]];
    3 để thêm vào tổng, nếu không trả về 0.
  • var divisors = n=>[...Array[n+1].keys[]].slice[1]
       .reduce[[s, a]=>s+[![n % a] && a], 0];
    
    console.log[divisors[12]];
    5 là giá trị ban đầu cho phép tính giảm.

Giảm tài liệu: //developer.mozilla.org/pt-r/docs/web/javascript/reference/global_objects/array/reduce

Chỉnh sửa

Trả lời Tristan về phía trước:

var divisorsList = [];
var divisors = [n]=>[...Array[n+1].keys[]].slice[1]
       .reduce[[s, a]=>{
          var divisor = ![n % a] && a;
          if [divisor] divisorsList.push[divisor];
          return s+divisor;
       }, 0];
    

console.log['Result:', divisors[12]];
console.log['Divisors:', divisorsList];

Đã trả lời ngày 31 tháng 3 năm 2017 lúc 22:58Mar 31, 2017 at 22:58

Nelson Teixeiranelson TeixeiraNelson Teixeira

5.9375 Huy hiệu vàng36 Huy hiệu bạc68 Huy hiệu Đồng5 gold badges36 silver badges68 bronze badges

3

Bạn phải kiểm tra xem số được chỉ định có hay không là một số chia của số nguyên đã cho. Bạn có thể sử dụng modulo

var divisors = n=>[...Array[n+1].keys[]].slice[1]
   .reduce[[s, a]=>s+[![n % a] && a], 0];

console.log[divisors[12]];
6 - nếu không có phần còn lại, số được chỉ định là chia của số nguyên đã cho - thêm nó vào tổng.

function sumDivisors[num]{
  var sum = 0;
  for [var i = 1; i  {
  sum = 1
  for [i = 2; n > 1; i++] {
    i * i > n ? i = n : 0
    b = 0
    while [n % i < 1] {
      c = sum * i
      sum += c - b
      b = c
      n /= i
    }
  }
  return sum
}

Đã trả lời ngày 24 tháng 9 năm 2019 lúc 7:16Sep 24, 2019 at 7:16

1

var divisors = n=>[...Array[n+1].keys[]].slice[1]
   .reduce[[s, a]=>s+[![n % a] && a], 0];

console.log[divisors[12]];
7 cũng là một Duvisor, điều này có thể được thực hiện hiệu quả hơn.

function sumDivisors[num] {
    let sum = 1;
    
    for [let i = 2; i < num / i; i++] {
        if [num % i === 0] {
            sum += i + num / i;
        }
    }

    const sqrt = Math.sqrt[num];
    return num + [num % sqrt === 0 ? sum + sqrt : sum];
}

Đã trả lời ngày 3 tháng 9 năm 2021 lúc 13:44Sep 3, 2021 at 13:44

LancelanceLance

6575 Huy hiệu bạc20 Huy hiệu Đồng5 silver badges20 bronze badges

function countDivisors[n]{
 let counter = 1;
 for[let i=1; i 

Bài Viết Liên Quan

Chủ Đề