Dự án euler vấn đề 3 javascript

Hãy cho chúng tôi biết chuyện gì đang xảy ra.
Mô tả chi tiết vấn đề của bạn tại đây.
mã của tôi đang chạy tốt nhưng tôi không thể vượt qua thử thách
tại sao?
Mã của bạn cho đến nay

function largestPrimeFactor(number) {
  let n = 0;
  let s = true
  for(let i = 2; i < number; i++){
    if(number % i == 0){
      s = false
      n = number / i
      break;
    }
    } 
     if(s == false){
       largestPrimeFactor(n)
     }else{
       console.log(number)
       return number
     }
    
  }

largestPrimeFactor(13195);

Thông tin trình duyệt của bạn

Tác Nhân Người Dùng bây giờ là. Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36

Thách đấu. Dự án Euler - Bài toán 3. Thừa số nguyên tố lớn nhất

Liên kết đến thử thách

Tìm ước nguyên tố lớn nhất của một hợp số (adsbygoogle = window.adsbygoogle || []).push({});

Các thừa số nguyên tố của 13195 là 5, 7, 13 và 29

Thừa số nguyên tố lớn nhất của số 600851475143 là bao nhiêu?


function largestPrimeFactor(n) {
    var d = Math.ceil(Math.sqrt(n));

    function isPrime(n) { 
        var i, limit = Math.ceil(Math.sqrt(n));
        // since the main loop generates odd numbers only
        // we can start testing primality dividing by 3
        for (i = 3; i <= limit; i += 2) {
            if (n % i === 0) {
                return false;
            }
        }
        return true;
    }

    // start with an odd number
    d = (d & 1) === 0 ? d - 1 : d;

    //while (!(isPrime(d) && n % d === 0)) {
    while (!(n % d === 0 && isPrime(d))) {
        d -= 2; // odd numbers only
    }
    return d;
}

console.log(largestPrimeFactor(600851475143));

Thừa số của một số là một vấn đề khá phổ biến và tôi sẽ không đi vào chi tiết ở đây. Một triển khai khá đơn giản có thể được nêu như thế này

function factorize(num) {
    var factors = {};

    var n = num;
    var i = 2;

    function count(n) {
        if (factors[n])
            ++factors[n];
        else
            factors[n] = 1;
    }

    while (i * i <= n) {

        while (n % i === 0) {
            n/= i;
            count(i);
        }
        i++;
    }

    if (n !== num) {
        if (n > 1)
            count(n);
    } else {
        count(num);
    }
    return factors;
}

Với nó, vấn đề có thể được giải quyết khá dễ dàng

function solution(n) {

    var tmp = factorize(n);
    var max = 0;
    for (var i in tmp) {
        max = Math.max(max, i);
    }
    return max;
}

Ngoài ra, chúng ta có thể kết hợp hai chức năng thành một chức năng nhỏ hơn nhiều, được điều chỉnh tùy chỉnh cho tác vụ này. Vì số nguyên tố lớn nhất có số mũ là 1, nên chúng tôi không cần kiểm tra thêm và có thể thực hiện (nếu không thì cần kiểm tra nhận xét)

Hôm nay chúng ta sẽ giải quyết bài toán Project Euler số 3. Chúng ta sẽ tìm hiểu tất cả về số nguyên tố và thừa số. Vấn đề này khá đơn giản, vì vậy chúng ta không cần phải tìm hiểu quá sâu về Wikipedia

thảo luận vấn đề

Các thừa số nguyên tố của 13195 là 5, 7, 13 và 29

Thừa số nguyên tố lớn nhất của số đã cho là gì?

Phiên bản video

Nếu bạn thích xem hơn là đọc, hãy xem video đi kèm với bài viết này. Nếu không, hãy tiếp tục đọc

Số nguyên tố

Trước tiên, hãy tìm hiểu số nguyên tố là gì, trong trường hợp bạn quên. những gì tôi đã làm

một số nguyên lớn hơn 1 mà không thể được thực hiện bằng cách nhân các số nguyên khác

Một số ví dụ. 2, 3, 5 và 7

Số nguyên tố

Thay vì cố gắng giải thích nó theo cách của riêng tôi, tôi sẽ để mathisfun. com giải thích

Thừa số là số nguyên tố

hoặc

Nói cách khác. bất kỳ số nguyên tố nào có thể được nhân lên để cho số ban đầu

Thí dụ

Các thừa số của 35 là. 1, 5, 7, 35. 35 là hợp số của 7 và 5, do đó 7 là số nguyên tố cao nhất, làm cho nó trở thành thừa số nguyên tố cao nhất

Dung dịch

Bây giờ chúng ta đã được trang bị toán ở trường tiểu học, hãy giải bài toán này

bước

  1. Lặp lại trên tất cả các yếu tố
  2. Kiểm tra thừa số là số nguyên tố
  3. Trả về yếu tố cuối cùng

Mã số

    function largestPrimeFactor(number) {
        // setup local state
      let primesAndFactor = [];
      // find all factors
      // In order to maintain this property of unique prime factorizations, it is necessary that the number one, 1, be categorized as neither prime nor composite.
      for (let factorIterator = 0; factorIterator <= number; factorIterator++) {
        // check if factor
        let isFactor = number % factorIterator == 0;
        let isPrime = true;

        if (isFactor) {
          // see if factor is a prime
          // a prime number has two factors, 1 and itself
          for (let i = 2; i < factorIterator; i++) {
            if (factorIterator % i == 0) {
              isPrime = false;
              continue;
            }
          }
        }

        // if so, push to primes list
        if (isFactor && isPrime) {
          primesAndFactor.push(factorIterator);
        }
      } // end for loop

      // return last element of array
      return primesAndFactor.pop();
    }

    largestPrimeFactor(13195);

Suy nghĩ cuối cùng

Trong thử thách này, chúng ta bắt đầu đi vào nhu cầu về các thuật toán. Đây là một cách tiếp cận vũ phu yêu cầu hai vòng lặp for, điều này không lý tưởng. Điều này hiện đang hoạt động ổn, nhưng chúng tôi sẽ cần thứ gì đó mạnh mẽ hơn cho các vấn đề tiếp theo, tôi chắc chắn