2017-02-21 5 views
0

Trouver d'autres nombres divisibles communs ensemble donné de nombrestrouver tous les nombres divisibles communs ensemble donné de divisibles

Je suis essentiellement essaie de résoudre ce qui est dans la vidéo en utilisant javascript. Je peux obtenir tous les facteurs premiers. mais je ne suis pas sûr de savoir comment produire un ensemble combiné de facteurs premiers. Ensuite, trouvez toutes les permutations de cela.

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

par exemple, X est un nombre est divisible par 9 et 24. Donc X est également divisible par ....?

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) (un , b) = a * b/[GCD] (https://en.wikipedia.org/wiki/Greatest_common_divisor) (a, b) – Phylogenesis

+0

@Phylogenèse hmmm Je ne cherche pas à trouver des multiples communs? par exemple 2 * 2 * 2 = 8 est une réponse valide. Je dis que si X peut être divisé par 9 et 24, il peut également être divisé par 8? mais au début, je ne sais pas si 8 est une réponse valable? – MonteCristo

+0

Il est compliqué d'indiquer, mais fondamentalement factoriser tous les diviseurs que vous avez en forme de puissance maximale, par exemple. 9 = 3^2, 24 = 2^3 * 3^1. Maintenant, prenez le maximum sur tous les exposants des nombres premiers, donc pour 2 l'exposant max est 3, pour 3 l'exposant max est 2, pour 5 l'exposant max est 0, etc. Maintenant itérer sur toutes les valeurs possibles de l'exposant de 0 à max pour chaque prime. Chaque choix donne un diviseur distinct de X. L'exposant de tous les zéros vous donne le diviseur 1, que vous pouvez supprimer en fonction de la façon dont vous comptez. –

Répondre

0

Solution en 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 

Résultat:

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 

Si vous souhaitez inclure les numéros qui tombent sous les deux numéros choisis pour comparer, il serait facile d'étendre ce code pour inclure cette fonctionnalité. Cependant, mathématiquement je soutiendrais que n'importe quel nombre plus petit que les deux nombres donnés, ne peut jamais être divisible PAR 9 ou 24. (parce que le résultat serait toujours une fraction non-impropre, et donc un décimal moins qu'un)

Cependant, si vous avez réarrangé la logique, pour indiquer "quels nombres divisent en 9 ou 24" que je pourrais être d'accord avec ce genre de logique. Et encore une fois, l'expansion de ce ne serait pas difficile. Bien que, je serais tenté de nettoyer mes fonctions pour faire une chose, et une seule chose. Qui en Java, inclurait probablement des pratiques de codage propres différentes de javascript.

Si cela n'a pas aidé à répondre à votre question, s'il vous plaît être plus descriptif avec ce que vous voulez exactement faire. Je peux réécrire le code, puis le traduire en javascript (Je suis décent en javascript, mais plus fort en Java)