2017-02-21 5 views
0

Найти другое распространенного делимого число данного набор чиселнайти все распространенное делимое число данного набор divisibles

Я по существу пытаюсь решить, что в видео с помощью JavaScript. Я могу получить все основные факторы. но я не уверен, как создать объединенный массив простых факторов. Затем найдите все перестановки.

https://youtu.be/zWcfVC-oCNw?t=4m32s

например, X - число делится на 9 и 24. Поэтому X также делится на ....?

function primeFactors(num) { 
    let n = num 
    let divisor = 2; 
    let primes = []; 
    while (divisor <= num) { 
     if (num % divisor === 0) { 
      primes.push(divisor); 
      num /= divisor; 
     } else {  
      divisor++; 
     } 

    } 

    return primes; 
} 

console.log(primeFactors(9)) // [3, 3] 
console.log(primeFactors(24)) //[2, 2, 2, 3] 

// All combinations of [2, 2, 2, 3, 3] are valid answers 
+2

[LCM] (https://en.wikipedia.org/wiki/Least_common_multiple) (в , b) = a * b/[GCD] (https://en.wikipedia.org/wiki/Greatest_common_divisor) (a, b) – Phylogenesis

+0

@Phylogenesis hmmm Я не пытаюсь найти общие множители? например. 2 * 2 * 2 = 8 является действительным ответом. Я говорю, если X можно разделить на 9 и 24, его также можно разделить на 8? но в начале я не знаю, является ли 8 действительным ответом? – MonteCristo

+0

Это сложное состояние, но в основном фактор всех делителей, которые у вас есть в форме простой мощности, например. 9 = 3^2, 24 = 2^3 * 3^1. Теперь возьмем max по всем показателям простых чисел, так что для 2 максимальный показатель равен 3, для 3 максимальный показатель равен 2, для 5 максимальный показатель равен 0 и т. Д. Теперь перебираем все возможные значения показателя из 0 до max для каждого штриха. Каждый такой выбор дает отдельный дивизор X. Показатель all-zeroes дает вам делитель 1, который вы можете подавить в зависимости от того, как вы рассчитываете. –

ответ

0

Решение на Java.

/* 
* Example solution to finding all possible numbers divisible by two different numbers. 
* In response to stack overflow question at the following URL: 
* https://stackoverflow.com/questions/42368860/find-all-common-divisible-numbers-given-set-of-divisibles 
* Author James Pata 
* Date 01/05/18 
*/ 

public class primeFactorization 
{ 
    public static void main(String[] args) 
    { 
     //CHOOSE ANY RANGE OF NUMBERS (>= 1 only) 
     int testRange = 216; 

     //CHOOSE ANY Two Numbers to Compare Divisibility Similarities 
     int number1 = 9; 
     int number2 = 24; 

     System.out.println("All numbers divisble by either " + number1 + " and " + number2 + " are: \n");  

     /* 
     *The for loop will iterate through the testRange of numbers to be analyzed starting at 1. 
     *The for loop has two local variables called tempVariabel that holds the remainder. 
     *These tempVariables will be used to determine if divisible, and will then print corresponding confirmation 
     * The final else statement was excluded intentionally to prevent the index variable, testNumber, from printing 
     */ 
     for(int testNumber = 1; testNumber <= testRange; testNumber++) 
     { 

     int tempVariable1 = testNumber%number1; 
     int tempVariable2 = testNumber%number2; 

     if(isNumberDivisibleBy(number1, testNumber) && isNumberDivisibleBy(number2, testNumber)) { 
      System.out.println(testNumber + " is divisible by both " + number1 + " and " + number2); 
      } else if(isNumberDivisibleBy(number1, testNumber)) { 
        System.out.println(testNumber + " is divisible by " + number1); 
       } else if(isNumberDivisibleBy(number2, testNumber)) { 
        System.out.println(testNumber + " is divisible by " + number2); 
        } 
     } 

    }//endmain 

    /* 
    *The isNumberDivisbileBy takes two parameters, and returns true if 
    *parameter testNumber is evenly divisible by number of choosing. 
    *(testNumber is determined later determined by the for loop in the main method.) 
    */ 
    public static boolean isNumberDivisibleBy(int number, int testNumber) 
    { 
     if (testNumber%number == 0) { 
     return true; 
     } else { return false; } 
    } 

}//endclass 

Результат:

All numbers divisble by either 9 andS 24 are: 

9 is divisible by 9 
18 is divisible by 9 
24 is divisible by 24 
27 is divisible by 9 
36 is divisible by 9 
45 is divisible by 9 
48 is divisible by 24 
54 is divisible by 9 
63 is divisible by 9 
72 is divisible by both 9 and 24 
81 is divisible by 9 
90 is divisible by 9 
96 is divisible by 24 
99 is divisible by 9 
108 is divisible by 9 
117 is divisible by 9 
120 is divisible by 24 
126 is divisible by 9 
135 is divisible by 9 
144 is divisible by both 9 and 24 
153 is divisible by 9 
162 is divisible by 9 
168 is divisible by 24 
171 is divisible by 9 
180 is divisible by 9 
189 is divisible by 9 
192 is divisible by 24 
198 is divisible by 9 
207 is divisible by 9 
216 is divisible by both 9 and 24 

Если вы хотели бы включить номера, которые находятся ниже двух выбранных чисел для сравнения, было бы легко расширить этот код, чтобы включить эту функцию. Тем не менее, математически я бы сказал, что любое число, меньшее, чем два заданных числа, никогда не может быть делимым на 9 или 24. (потому что результат всегда будет некорректной и, следовательно, десятичным меньше одного)

Однако, если вы перестроили логику, укажите «какие числа делят INTO 9 или 24», чем я мог бы согласиться с такой логикой. И еще раз, расширение этого не составит труда. Хотя, у меня возникло бы желание очистить мои функции, чтобы сделать что-то одно, и только одно. Что в Java, скорее всего, будет включать в себя чистые методы кодирования, отличные от javascript.

Если это не помогло ответить на ваш вопрос, пожалуйста, опишите, что именно вы хотите сделать. Я могу переписать код, а затем перевести его в JavaScript (Я порядочный в JavaScript, но сильнее в Java)

Смежные вопросы