Главный фактор и JavaScript - PullRequest
       0

Главный фактор и JavaScript

1 голос
/ 22 ноября 2011

Я застрял с кодом JavaScript, который я использую для решения проблемы, которая гласит:

Основными факторами 13195 являются 5, 7, 13 и 29. Что является самым большим основным фактором числа 600851475143?

(это не домашняя работа, это онлайн-кодирование / математическая задача)

Итак, я придумал это решение:

<html>
    <head>
    <script type="text/javascript">

        // This function checks whether it's possible to divide the prime number
        function al(n){
            // k = 13195 is the number that I have to find the prime factor for
            var k = 13195;
            if (k%n) {
                return;
            }
            else {
                document.write(n + '   ');
            }
        }
    </script>
    </head>
    <body>
    <script type="text/javascript">

        //a and b are just for counting from the number n to 2 to find the prime numbers
        var a = 2;
        for (var n = 13194 ; n>a ; n--) {
            var b = 2;
            //if the found number is divisible, we skip it
            while(b<n) {
                if (n % b == 0) {
                    break;
                }
                else if (b = n - 1){
                    al(n);
                }
                b++;
            }
        }
    </script>
    </body>
</html>

Теперь к проблеме: выводятся следующие цифры: «2639 1885 1015 455 377 203 145 91 65 35 29 13 7 5». Это не простые числа. Я посмотрел на числа и обнаружил, что число 13195, деленное на 5 (последнее число), дает первое число; 2639; 13195, деленное на 7, дает 1885; и т.д.

Что именно я делаю не так?

Ответы [ 2 ]

9 голосов
/ 22 ноября 2011

Ваша проблема не математическая - у вас просто ошибка в одной из ваших условных проверок.

Измените if(b = n-1) на if(b == n-1).Прямо сейчас ваш код на самом деле не проверяется, чтобы убедиться, что фактор является основным;вместо этого он присваивает значение n-1 значению b (для нечетных значений n), а затем автоматически вызывает a1(b), поэтому ваш результат - все возможные нечетные коэффициенты k.

1 голос
/ 22 марта 2013

Мое решение javascript-

<script type="text/javascript">
function largestPrimeFactor(number) {
var i = 2;
while (i <= number) {
    if (number % i == 0) {
        number /= i;    
    } else {
        i++;
    }
}
console.log(i);
}
var a = 600851475143 ; 
largestPrimeFactor(a)
</script>
...