File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/3A10-6pPMeND3.js.map
{"version":3,"file":"3A10-6pPMeND3.js","sources":["../../src/exercices/3e/3A10.js"],"sourcesContent":["import { combinaisonListesSansChangerOrdre, shuffle, shuffle2tableaux } from '../../lib/outils/arrayOutils'\nimport { texteEnCouleur } from '../../lib/outils/embellissements'\nimport { modalPdf } from '../../lib/outils/modales.js'\nimport { listeDesDiviseurs } from '../../lib/outils/primalite.js'\nimport { nombreAvecEspace } from '../../lib/outils/texNombre.js'\nimport Exercice from '../Exercice.js'\nimport { context } from '../../modules/context.js'\nimport { listeQuestionsToContenu, egal, randint, contraindreValeur } from '../../modules/outils.js'\n\nexport const titre = 'Understand the vocabulary: Euclidean division, divisors, multiples'\n\n/**\n * Division Euclidienne; diviseurs, multiples, critères de divisibilité\n * Exercice bilan\n * @author Sébastien Lozano\n */\nexport const uuid = '5b60d'\nexport const ref = '3A10'\nexport default function DivisionEuclidienneMultiplesDiviseursCriteres () {\n Exercice.call(this) // Héritage de la classe Exercice()\n // context.isHtml ? this.spacing = 3 : this.spacing = 2;\n context.isHtml ? this.spacing = 1 : this.spacing = 2\n // context.isHtml ? this.spacingCorr = 2 : this.spacingCorr = 1;\n context.isHtml ? this.spacingCorr = 2 : this.spacingCorr = 2\n this.nbQuestions = 5\n this.nbCols = 1\n this.nbColsCorr = 1\n this.sup = '3'\n this.sup2 = '10'\n this.sup3 = 13\n this.correctionDetailleeDisponible = true\n this.correctionDetaillee = false\n\n this.nouvelleVersion = function (numeroExercice) {\n this.sup3 = contraindreValeur(2, 16, this.sup3, 10)\n let nbChiffresMax = contraindreValeur(1, 5, this.sup, 2)\n const nbDiviseursMax = contraindreValeur(2, this.sup3, this.sup2, 6)\n\n if (context.isHtml) { // les boutons d'aide uniquement pour la version html\n // this.helpbutton = '';\n this.boutonAide = modalPdf(numeroExercice, 'assets/pdf/FicheArithmetique-3A10.pdf', 'Cheat sheet on Euclidean division (Sébastien Lozano)', 'Cheat sheet')\n // this.buttonHelp += modalVideo('conteMathsNombresPremiers','https://coopmaths.fr/videos/LesNombresPremiers.mp4','Little mathematical tale','Intro Video');\n }\n\n this.listeQuestions = [] // Liste de questions\n this.listeCorrections = [] // Liste de questions corrigées\n this.contenu = '' // Liste de questions\n this.contenuCorrection = '' // Liste de questions corrigées\n\n const typesDeQuestionsDisponibles = [1, 2, 3, 4, 5]\n const listeTypeDeQuestions = combinaisonListesSansChangerOrdre(typesDeQuestionsDisponibles, this.nbQuestions)\n\n for (let i = 0, M, listeDiviseursM, nbDiviseursM, n1, n2, p1, p2, rgDiviseur, typeDeQuestion, multiplicateurs, multiples, textes, textesCorr, candidatsDiviseurs, dividende, diviseur, quotient, reste, diviseurs, quotients, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {\n typeDeQuestion = listeTypeDeQuestions[i]\n\n switch (typeDeQuestion) {\n case 1: { // plus grand reste dans une division euclidienne\n diviseur = randint(2, 99)\n const myTexte = {\n vocabulaire: [\n 'stay',\n 'dividend',\n 'quotient',\n 'divider'\n ],\n correction: [\n `there cannot be more ${diviseur - 1} left, otherwise we can still add at least 1 time ${diviseur} to the dividend and therefore 1 to the quotient.`,\n 'the dividend can be any, so you can choose it as big as you want.',\n 'the quotient will depend on the dividend, so it will be greater as the dividend is.',\n 'This is because the divisor is fixed, so the biggest one is itself!'\n ]\n }\n\n const myChoice = randint(0, 3)\n texte = `What is the largest possible ${myTexte.vocabulaire[myChoice]} in a Euclidean division by ${diviseur}?`\n texteCorr = `If we divide by ${diviseur}, `\n texteCorr += myTexte.correction[myChoice]\n\n // text += '<hr>'\n // textCorr += '<hr>'\n // for (let j = 0; j<4; j++) {\n // text += `- What is the largest possible ${myTexte.vocabulaire[j]} in a Euclidean division by ${diviseur}.`\n // text += '<br>'\n // textCorr += `If we divide by ${diviseur}, `\n // textCorr += myText.correction[j]\n // textCorr += '<br>'\n // }\n break\n }\n case 2: // quotient et reste d'une division euclidienne donnée\n diviseur = randint(2, 99)\n dividende = randint(1001, 99999)\n quotient = Math.trunc(dividende / diviseur)\n reste = dividende % diviseur\n\n texte = `We have ${nombreAvecEspace(dividende)} = ${nombreAvecEspace(diviseur)}$\\\\times$${nombreAvecEspace(quotient)} $+$ ${nombreAvecEspace(reste)}`\n texte += '<br>'\n texte += `Write the quotient and remainder of the Euclidean division of ${nombreAvecEspace(dividende)} by ${diviseur}.`\n texteCorr = `In the Euclidean division of ${nombreAvecEspace(dividende)} by ${diviseur}, the quotient is ${nombreAvecEspace(quotient)} and the remainder ${reste}.`\n break\n case 3: // caractérisation des multiples et diviseurs par le reste de la division euclidienne\n dividende = randint(101, 9999)\n if (listeDesDiviseurs(dividende).length % 2 === 0) { // si il y a un nombre pair de diviseurs on prend le (n/2+1) eme\n rgDiviseur = listeDesDiviseurs(dividende).length / 2 + 1 // rang du diviseur choisi\n } else { // il y a nbre impair de diviseurs on prend le ((n-1)/2 +1) eme\n rgDiviseur = (listeDesDiviseurs(dividende).length - 1) / 2 + 1\n }\n diviseur = listeDesDiviseurs(dividende)[rgDiviseur - 1] // on choisit le diviseur central de dividende, ATTENTION rang des tableaux commence à 0\n candidatsDiviseurs = [diviseur - 1, diviseur, diviseur + 1] // on prend l'entier précédent et le successeur de ce diviseur\n\n // Should I condition to avoid divisor 1?\n candidatsDiviseurs = shuffle(candidatsDiviseurs) // on mélange le tableau\n texte = 'The following three Euclidean divisions are exact: <br>'\n texte += `${nombreAvecEspace(dividende)} = ${nombreAvecEspace(candidatsDiviseurs[0])}$\\\\times$${nombreAvecEspace(Math.trunc(dividende / candidatsDiviseurs[0]))} $+$ ${nombreAvecEspace(dividende % candidatsDiviseurs[0])}`\n texte += '<br>'\n texte += `${nombreAvecEspace(dividende)} = ${nombreAvecEspace(candidatsDiviseurs[1])}$\\\\times$${nombreAvecEspace(Math.trunc(dividende / candidatsDiviseurs[1]))} $+$ ${nombreAvecEspace(dividende % candidatsDiviseurs[1])}`\n texte += '<br>'\n texte += `${nombreAvecEspace(dividende)} = ${nombreAvecEspace(candidatsDiviseurs[2])}$\\\\times$${nombreAvecEspace(Math.trunc(dividende / candidatsDiviseurs[2]))} $+$ ${nombreAvecEspace(dividende % candidatsDiviseurs[2])}`\n texte += '<br>'\n texte += `Without calculating, say whether the numbers ${nombreAvecEspace(candidatsDiviseurs[0])}; ${nombreAvecEspace(candidatsDiviseurs[1])}; ${nombreAvecEspace(candidatsDiviseurs[2])} are divisors of ${nombreAvecEspace(dividende)}. Justify.`\n texteCorr = ''\n if (egal(dividende % candidatsDiviseurs[0], 0)) { // egal() est une fonction de JC pour éviter les problèmes de virgule flottante\n texteCorr += `The remainder of the Euclian division of ${nombreAvecEspace(dividende)} by ${nombreAvecEspace(candidatsDiviseurs[0])} is 0, so ${nombreAvecEspace(candidatsDiviseurs[0])} is a divisor of ${nombreAvecEspace(dividende)}.`\n } else {\n texteCorr += `The remainder of the Euclian division of ${nombreAvecEspace(dividende)} by ${nombreAvecEspace(candidatsDiviseurs[0])} does not equal 0 so ${nombreAvecEspace(candidatsDiviseurs[0])} is not a divisor of ${nombreAvecEspace(dividende)}.`\n }\n texteCorr += '<br>'\n if (egal(dividende % candidatsDiviseurs[1], 0)) { // egal() est une fonction de JC pour éviter les problèmes de virgule flottante\n texteCorr += `The remainder of the Euclian division of ${nombreAvecEspace(dividende)} by ${nombreAvecEspace(candidatsDiviseurs[1])} is 0 so ${nombreAvecEspace(candidatsDiviseurs[1])} divides ${nombreAvecEspace(dividende)}.`\n } else {\n texteCorr += `The remainder of the Euclian division of ${nombreAvecEspace(dividende)} by ${nombreAvecEspace(candidatsDiviseurs[1])} is not equal to 0 so ${nombreAvecEspace(candidatsDiviseurs[1])} does not divide ${nombreAvecEspace(dividende)}.`\n }\n texteCorr += '<br>'\n if (egal(dividende % candidatsDiviseurs[2], 0)) { // egal() est une fonction de JC pour éviter les problèmes de virgule flottante\n texteCorr += `The remainder of the Euclian division of ${nombreAvecEspace(dividende)} by ${nombreAvecEspace(candidatsDiviseurs[2])} is 0 so ${nombreAvecEspace(dividende)} is divisible by ${nombreAvecEspace(candidatsDiviseurs[2])}.`\n } else {\n texteCorr += `The remainder of the Euclian division of ${nombreAvecEspace(dividende)} by ${nombreAvecEspace(candidatsDiviseurs[2])} is not equal to 0 so ${nombreAvecEspace(dividende)} is not divisible by ${nombreAvecEspace(candidatsDiviseurs[2])}.`\n }\n texteCorr += '<br>'\n break\n case 4: // vocabulaire diviseurs et multiples\n // we declare useful tables\n diviseurs = []\n multiplicateurs = []\n multiples = []\n quotients = []\n textes = []\n textesCorr = []\n // we randomly draw 4 different divisors between 2 and 999 and 4 different multipliers between 2 and 9\n diviseurs = [randint(2, 999), randint(2, 999, [diviseurs[0]]), randint(2, 999, [diviseurs[0], diviseurs[1]]), randint(2, 999, [diviseurs[0], diviseurs[1], diviseurs[2]])]\n multiplicateurs = [randint(2, 9), randint(2, 9, [multiplicateurs[0]]), randint(2, 9, [multiplicateurs[0], multiplicateurs[1]]), randint(2, 9, [multiplicateurs[0], multiplicateurs[1], multiplicateurs[2]])]\n // we calculate the multiples\n for (let j = 0; j < 4; j++) {\n multiples[j] = diviseurs[j] * multiplicateurs[j]\n quotients[j] = multiples[j] / diviseurs[j]\n diviseurs[j] = nombreAvecEspace(diviseurs[j])\n multiples[j] = nombreAvecEspace(multiples[j])\n quotients[j] = nombreAvecEspace(quotients[j])\n }\n // we create the sentences\n textes[0] = `${diviseurs[0]} $\\\\ldots\\\\ldots\\\\ldots\\\\ldots$ ${multiples[0]}`\n textesCorr[0] = `${diviseurs[0]} is a divisor of ${multiples[0]} because ${multiples[0]} = ${diviseurs[0]}$\\\\times$${quotients[0]}.`\n textes[1] = `${diviseurs[1]} $\\\\ldots\\\\ldots\\\\ldots\\\\ldots$ ${multiples[1]}`\n textesCorr[1] = `${diviseurs[1]} is a divisor of ${multiples[1]} because ${multiples[1]} = ${diviseurs[1]}$\\\\times$${quotients[1]}.`\n textes[2] = `${multiples[2]} $\\\\ldots\\\\ldots\\\\ldots\\\\ldots$ ${diviseurs[2]}`\n textesCorr[2] = `${multiples[2]} is a multiple of ${diviseurs[2]} because ${multiples[2]} = ${diviseurs[2]}$\\\\times$${quotients[2]}.`\n textes[3] = `${multiples[3]} $\\\\ldots\\\\ldots\\\\ldots\\\\ldots$ ${diviseurs[3]}`\n textesCorr[3] = `${multiples[3]} is a multiple of ${diviseurs[3]} because ${multiples[3]} = ${diviseurs[3]}$\\\\times$${quotients[3]}.`\n // we add two cases neither multiple nor divisor\n // we choose two numbers\n n1 = nombreAvecEspace(randint(2, 999, [diviseurs[0], diviseurs[1], diviseurs[2], diviseurs[3]]))\n p1 = nombreAvecEspace(randint(2, 999, [diviseurs[0], diviseurs[1], diviseurs[2], diviseurs[3], n1]))\n // we choose another one which is not in the list of divisors of n1\n n2 = nombreAvecEspace(randint(2, 999, listeDesDiviseurs(n1)))\n p2 = nombreAvecEspace(randint(2, 999, listeDesDiviseurs(p1)))\n textes[4] = `${n1} $\\\\ldots\\\\ldots\\\\ldots\\\\ldots$ ${n2}`\n textesCorr[4] = `${n1} is neither a multiple nor a divisor of ${n2} because ${n1} = ${n2}$\\\\times$${Math.trunc(n1 / n2)}+${texteEnCouleur(n1 % n2)} and ${n2} = ${n1}$\\\\times$${Math.trunc(n2 / n1)}+${texteEnCouleur(n2 % n1)}.`\n textes[5] = `${p2} $\\\\ldots\\\\ldots\\\\ldots\\\\ldots$ ${p1}`\n textesCorr[5] = `${p2} is neither a multiple nor a divisor of ${p1} because ${p1} = ${p2}$\\\\times$${Math.trunc(p1 / p2)}+${texteEnCouleur(p1 % p2)} and ${p2} = ${p1}$\\\\times$${Math.trunc(p2 / p1)}+${texteEnCouleur(p2 % p1)}.`\n // we mix so that the order changes!\n shuffle2tableaux(textes, textesCorr)\n texte = 'After testing with the calculator, complete each sentence with \"is a divisor of\" or \"is a multiple of\" or \"is neither a divisor nor a multiple of\".'\n texte += '<br>'\n texteCorr = ''\n for (let j = 0; j < 5; j++) {\n texte += textes[j]\n texte += '<br>'\n texteCorr += textesCorr[j]\n texteCorr += '<br>'\n }\n texte += textes[5]\n // text +=`<br>`;\n texteCorr += textesCorr[5]\n texteCorr += '<br>'\n break\n case 5:\n if (nbDiviseursMax > 10) { // les nombres de 2 chiffres ayant plus de 10 diviseurs étant peu nombreux, on force au moins 3 chiffres.\n nbChiffresMax = Math.max(nbChiffresMax, 3)\n }\n do {\n M = randint(10 ** (nbChiffresMax - 1), 10 ** nbChiffresMax - 1)\n listeDiviseursM = listeDesDiviseurs(M)\n nbDiviseursM = listeDiviseursM.length\n } while (nbDiviseursM < Math.max(2, nbDiviseursMax - 3) || nbDiviseursM > nbDiviseursMax)\n texte = `Write the list of all ${M} divisors.`\n texteCorr = `To find the list of ${M} divisors, we look for all the products of two factors which give ${M}, always writing the smallest factor first.<br>`\n texteCorr += `It is sufficient to look for divisors less than the largest number whose square is less than ${M}, for example here, ${Math.trunc(Math.sqrt(M))}$\\\\times$${Math.trunc(Math.sqrt(M))} = ${Math.trunc(Math.sqrt(M)) * Math.trunc(Math.sqrt(M))}<${M}`\n texteCorr += ` and ${Math.trunc(Math.sqrt(M)) + 1}$\\\\times$${Math.trunc(Math.sqrt(M)) + 1} = ${(Math.trunc(Math.sqrt(M)) + 1) * (Math.trunc(Math.sqrt(M)) + 1)}>${M} so just stop looking for factors at ${Math.trunc(Math.sqrt(M))}.`\n if (this.correctionDetaillee) {\n context.isHtml ? texteCorr += '<hr>' : texteCorr += '\\\\by \\\\hrulefill \\\\by'\n texteCorr += `$\\\\textbf{Proof of the previous statement}$ <br>Suppose that ${M} is the product of two integers p$\\\\times$q with p < q:`\n if (context.isHtml) {\n texteCorr += `<br>- if p$\\\\times$p > ${M}, then q$\\\\times$q < ${M}, otherwise p$\\\\times$q cannot be equal to ${M}.<br>- but, in this case, p would be greater than q otherwise p$\\\\times$q would be less than ${M} which should not be the case.<br>`\n } else {\n texteCorr += `\\\\begin{itemize}\\\\item if p$\\\\times$p > ${M}, then q$\\\\times$q < ${M}, otherwise p$\\\\times$q cannot be equal to ${M}.\\\\item but, in this case, p would be greater than q otherwise p$\\\\times$q would be less than ${M} which should not be the case.\\\\end{itemize}`\n }\n texteCorr += `So it is sufficient to stop the search when the square of p exceeds ${M}.`\n context.isHtml ? texteCorr += '<hr>' : texteCorr += '\\\\by \\\\hrulefill \\\\by'\n }\n context.isHtml ? texteCorr += '<br>' : texteCorr += '\\\\by'\n if (listeDiviseursM.length % 2 === 0) { // si il y a un nombre pair de diviseurs\n for (let m = 0; m < (listeDiviseursM.length / 2); m++) {\n texteCorr += '' + listeDiviseursM[m] + '$\\\\times$' + listeDiviseursM[(listeDiviseursM.length - m - 1)] + ` = ${M}<br>`\n }\n } else {\n for (let m = 0; m < ((listeDiviseursM.length - 1) / 2); m++) {\n texteCorr += '' + listeDiviseursM[m] + '$\\\\times$' + listeDiviseursM[(listeDiviseursM.length - m - 1)] + ` = ${M}<br>`\n }\n texteCorr += '' + listeDiviseursM[(listeDiviseursM.length - 1) / 2] + '$\\\\times$' + listeDiviseursM[(listeDiviseursM.length - 1) / 2] + ` = ${M}<br>`\n }\n texteCorr += `Each of the factors in the list above is a divisor of ${M}.<br>`\n texteCorr += `The list of ${M} divisors is therefore `\n texteCorr += '1'\n for (let w = 1; w < listeDiviseursM.length; w++) {\n texteCorr += ' ;' + listeDiviseursM[w]\n }\n texteCorr += '.'\n break\n }\n\n if (this.questionJamaisPosee(i, typeDeQuestion, texte)) { // Si la question n'a jamais été posée, on en créé une autre\n this.listeQuestions.push(texte)\n this.listeCorrections.push(texteCorr)\n i++\n }\n cpt++\n }\n\n listeQuestionsToContenu(this)\n }\n this.besoinFormulaireNumerique = ['Number of digits of the integer from question 5', 20]\n this.besoinFormulaire2Numerique = ['Maximum number of divisors of the integer from question 5', 20]\n}\n"],"names":["titre","uuid","ref","DivisionEuclidienneMultiplesDiviseursCriteres","Exercice","context","numeroExercice","contraindreValeur","nbChiffresMax","nbDiviseursMax","modalPdf","listeTypeDeQuestions","combinaisonListesSansChangerOrdre","i","M","listeDiviseursM","nbDiviseursM","n1","n2","p1","p2","rgDiviseur","typeDeQuestion","multiplicateurs","multiples","textes","textesCorr","candidatsDiviseurs","dividende","diviseur","quotient","reste","diviseurs","quotients","texte","texteCorr","cpt","randint","myTexte","myChoice","nombreAvecEspace","listeDesDiviseurs","shuffle","egal","j","texteEnCouleur","shuffle2tableaux","m","w","listeQuestionsToContenu"],"mappings":"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"}