File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/3A10-1-T4mtycRM.js.map
{"version":3,"file":"3A10-1-T4mtycRM.js","sources":["../../src/exercices/3e/3A10-1.js"],"sourcesContent":["import { combinaisonListesSansChangerOrdre, shuffle } from '../../lib/outils/arrayOutils'\nimport { texteEnCouleurEtGras } from '../../lib/outils/embellissements'\nimport { warnMessage } from '../../lib/format/message.js'\nimport { modalPdf, modalVideo } from '../../lib/outils/modales.js'\nimport { cribleEratostheneN } 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, randint } from '../../modules/outils.js'\nimport { propositionsQcm } from '../../lib/interactif/qcm.js'\nexport const titre = 'Indiquer si des nombres sont premiers ou pas'\nexport const interactifReady = true\nexport const interactifType = 'qcm'\nexport const amcReady = true\nexport const amcType = 'qcmMono'\n\n/**\n * Justifier la non primalité réinvestissement des critères de divisibilité\n * Nombres à 3 ou 4 chiffres, un multiple de 2, de 3, de 5, de 7, de 11, sous forme d'un produit de deux nombres premiers inférieurs à 100\n * et un nombre premier inferieur à 529\n * dans cet exo on n'utilise pas les critères par 7 et 11\n * @author Sébastien Lozano + Jean-Claude Lhote pour l'interactivité.\n * Référence 3A10-1\n */\nexport const uuid = 'bba55'\nexport const ref = '3A10-1'\nexport default function PremierOuPas () {\n Exercice.call(this) // Héritage de la classe Exercice()\n // pas de différence entre la version html et la version latex pour la consigne\n context.isHtml ? this.spacing = 1 : this.spacing = 2\n context.isHtml ? this.spacingCorr = 2 : this.spacingCorr = 1\n\n // this.correctionDetailleeDisponible = true;\n this.nbCols = 2\n this.nbColsCorr = 1\n this.nbQuestions = 5\n this.sup = 1\n this.sup2 = false // Par défaut on n'affiche pas la liste des nombres premiers\n this.sup3 = false\n this.level = 2\n // this.nbQuestionsModifiable = false (EE : bloquant pour AMC sinon)\n this.listePackages = 'bclogo'\n const prems = cribleEratostheneN(529) // constante contenant tous les nombres premiers jusqu'à 529...\n this.nouvelleVersion = function () {\n this.consigne = this.level === 2\n ? this.nbQuestions > 1\n ? 'Justifier que les nombres suivants sont premiers ou pas.'\n : 'Justifier que le nombre suivant est premier ou pas.'\n : this.nbQuestions > 1\n ? 'Indiquer si les nombres suivants sont premiers ou pas.' + (this.interactif ? '' : ' Justifier s\\'ils ne le sont pas.')\n : 'Indiquer si le nombre suivant est premier ou pas.' + (this.interactif ? '' : ' Justifier s\\'il ne l\\'est pas.')\n let typesDeQuestions\n if (context.isHtml && this.level === 2) { // les boutons d'aide uniquement pour la version html\n this.boutonAide = modalPdf(this.numeroExercice, 'assets/pdf/FicheArithmetique-3A11.pdf', 'Aide mémoire sur les nombres premiers (Sébastien Lozano)', 'Aide mémoire')\n this.boutonAide += modalVideo('conteMathsNombresPremiers', 'https://coopmaths.fr/videos/LesNombresPremiers.mp4', 'Petit conte mathématique - Les Nombres Premiers', 'Intro Vidéo')\n }\n\n this.listeQuestions = [] // Liste de questions\n this.listeCorrections = [] // Liste de questions corrigées\n this.autoCorrection = []\n\n this.contenu = '' // Liste de questions\n this.contenuCorrection = '' // Liste de questions corrigées\n\n let typesDeQuestionsDisponibles // = [1, 2, 3, 6, 7];\n if (this.sup === 1) {\n typesDeQuestionsDisponibles = [1, 2, 3, 8]\n } else {\n typesDeQuestionsDisponibles = [1, 2, 3, 6, 7]\n }\n typesDeQuestionsDisponibles = shuffle(typesDeQuestionsDisponibles) // on mélange l'ordre des questions\n\n const listeTypeDeQuestions = combinaisonListesSansChangerOrdre(typesDeQuestionsDisponibles, this.nbQuestions)\n\n let stringRappel = 'Cette liste des nombres premiers inférieurs à 100 pourra être utile : <br>' + prems[0]\n for (let k = 1; k < 25; k++) {\n stringRappel += ', ' + prems[k]\n }\n stringRappel += '.'\n\n for (let i = 0, texte, texteCorr, r1, r2, prime1, prime2, cpt = 0; i < this.nbQuestions && cpt < 50;) {\n typesDeQuestions = listeTypeDeQuestions[i]\n\n let N // le nombre de la question\n let r\n let tabPremiersATester\n let sum\n\n let Nlongueur // pour la taille du string N\n let N1 // pour la repetiton du critère\n let N1longueur // pour la taille du string N1\n let sum1 // pour la somme de la répétition du critère\n\n let evenSum // pour la somme des chiffres de rang impair\n let oddSum // pour la somme des chiffres de rang pair\n let bonneReponse\n this.introduction = this.level === 2 ? warnMessage('Penser aux critères de divisibilité.', 'nombres', 'Coup de pouce') : ''\n if (this.sup2) {\n this.introduction += warnMessage(stringRappel, 'nombres', 'Coup de pouce')\n } else this.introduction += ''\n switch (typesDeQuestions) {\n case 1: // nombre pair\n N = this.level === 2 ? 2 * randint(51, 499) : 2 * randint(12, 49)\n texte = nombreAvecEspace(N)\n texteCorr = `Comme ${nombreAvecEspace(N)} est pair, il admet donc au moins trois diviseurs qui sont 1, 2 et lui-même, `\n texteCorr += texteEnCouleurEtGras(nombreAvecEspace(N) + ' n\\'est donc pas premier') + '.'\n bonneReponse = 'non'\n break\n case 2: // Multiple de 3\n sum = 0 // pour la valeur de la somme;\n N = this.level === 2 ? 3 * randint(34, 333) : 3 * randint(11, 33) // on initialise avant la boucle car on a peut être de la chance\n while ((N % 2 === 0) || (N % 5 === 0)) {\n N = this.level === 2 ? 3 * randint(34, 333) : 3 * randint(11, 33)\n }\n texte = nombreAvecEspace(N)\n texteCorr = 'Comme ' + N.toString().charAt(0)\n sum = Number(N.toString().charAt(0))\n for (let k = 1; k < N.toString().length; k++) {\n texteCorr += ' + ' + N.toString().charAt(k)\n sum += Number(N.toString().charAt(k))\n }\n texteCorr += ` = ${sum} est un multiple de 3 donc ${nombreAvecEspace(N)} aussi, il admet donc au moins trois diviseurs qui sont 1, 3 et lui-même, `\n texteCorr += texteEnCouleurEtGras(nombreAvecEspace(N) + ' n\\'est donc pas premier') + '.'\n bonneReponse = 'non'\n break\n case 3: // Multiple de 5\n N = this.level === 2 ? 5 * randint(20, 200) : 5 * randint(3, 19)\n texte = nombreAvecEspace(N)\n texteCorr = `Comme le chiffre des unités de ${nombreAvecEspace(N)} est un ${N.toString().charAt(N.toString().length - 1)}, alors ${nombreAvecEspace(N)} est divisible par 5, `\n texteCorr += 'il admet donc au moins trois diviseurs qui sont 1, 5 et lui-même, '\n texteCorr += texteEnCouleurEtGras(nombreAvecEspace(N) + ' n\\'est donc pas premier') + '.'\n bonneReponse = 'non'\n break\n case 4: // Multiple de 7\n N = this.level === 2 ? 7 * randint(15, 143) : 7 * randint(2, 14)\n while ((N % 2 === 0) || (N % 3 === 0) || (N % 5 === 0)) {\n N = this.level === 2 ? 7 * randint(15, 143) : 7 * randint(2, 14)\n }\n texte = nombreAvecEspace(N)\n Nlongueur = N.toString().length\n texteCorr = ` 7 divise ${nombreAvecEspace(N)}, en effet : `\n texteCorr += '<br>'\n N1 = N\n N1longueur = Nlongueur\n sum1 = Number(N1.toString().substring(0, N1longueur - 1)) + 5 * Number(N1.toString().charAt(N1longueur - 1))\n while (sum1 >= 56) {\n texteCorr += `${N1.toString().substring(0, N1longueur - 1)} + 5$\\\\times$${N1.toString().charAt(N1longueur - 1)}`\n texteCorr += ` = ${Number(N1.toString().substring(0, N1longueur - 1)) + 5 * Number(N1.toString().charAt(N1longueur - 1))}`\n texteCorr += '<br>'\n N1 = sum1\n N1longueur = N1.toString().length\n sum1 = Number(N1.toString().substring(0, N1longueur - 1)) + 5 * Number(N1.toString().charAt(N1longueur - 1))\n }\n texteCorr += `Comme ${N1.toString().substring(0, N1longueur - 1)} + 5$\\\\times$${N1.toString().charAt(N1longueur - 1)} = ${sum1} est un multiple de 7 alors 7 divise ${N} aussi `\n texteCorr += 'qui admet donc au moins trois diviseurs : 1, 7 et lui-même, '\n texteCorr += texteEnCouleurEtGras(nombreAvecEspace(N) + ' n\\'est donc pas premier') + '.'\n bonneReponse = 'non'\n break\n case 5: // multiple de 11\n N = 11 * randint(10, 91)\n while ((N % 2 === 0) || (N % 3 === 0) || (N % 5 === 0) || (N % 7 === 0)) {\n N = 11 * randint(10, 91)\n }\n texte = nombreAvecEspace(N)\n texteCorr = `D'une part, la somme des chiffres de rang impair de ${nombreAvecEspace(N)} vaut `\n if (Number(N.toString().length) % 2 === 0) { // si N a un nombre pair de chiffres\n evenSum = Number(N.toString().charAt(1))\n texteCorr += N.toString().charAt(1)\n for (let k = 3; k < N.toString().length; k++) {\n if (k % 2 === 1) {\n texteCorr += ' + ' + N.toString().charAt(k)\n evenSum += Number(N.toString().charAt(k))\n }\n }\n texteCorr += ' = ' + evenSum + ' <br> '\n } else { // sinon N a un nombre impair de chiffres\n evenSum = Number(N.toString().charAt(0))\n texteCorr += N.toString().charAt(0)\n for (let m = 1; m < N.toString().length; m++) {\n if (m % 2 === 0) {\n texteCorr += ' + ' + N.toString().charAt(m)\n evenSum += Number(N.toString().charAt(m))\n }\n }\n texteCorr += ' = ' + evenSum + '<br> '\n }\n texteCorr += `d'autre part, la somme des chiffres de rang pair de ${nombreAvecEspace(N)} vaut `\n if (Number(N.toString().length) % 2 === 0) { // si N a un nombre pair de chiffres\n oddSum = Number(N.toString().charAt(0))\n texteCorr += N.toString().charAt(0)\n for (let k = 1; k < N.toString().length; k++) {\n if (k % 2 === 0) {\n texteCorr += ' + ' + N.toString().charAt(k)\n oddSum += Number(N.toString().charAt(k))\n }\n }\n texteCorr += ' = ' + oddSum + ' <br> '\n } else { // sinon N a un nombre impair de chiffres\n oddSum = Number(N.toString().charAt(1))\n texteCorr += N.toString().charAt(1)\n for (let m = 3; m < N.toString().length; m++) {\n if (m % 2 === 1) {\n texteCorr += ' + ' + N.toString().charAt(m)\n oddSum += Number(N.toString().charAt(m))\n }\n }\n texteCorr += ' = ' + oddSum + '<br> '\n }\n texteCorr += 'la différence entre la somme des chiffres de rangs pairs et celle des chiffres de rangs impairs vaut '\n if ((oddSum - evenSum) === 0) {\n texteCorr += `${oddSum - evenSum}, `\n } else {\n texteCorr += `${Math.abs(oddSum - evenSum)} qui est un multiple de 11, `\n }\n texteCorr += '<br>'\n texteCorr += ` cela signifie que ${nombreAvecEspace(N)} est divisible par 11, il admet donc au moins trois diviseurs qui sont 1, 11 et lui-même,`\n texteCorr += texteEnCouleurEtGras(nombreAvecEspace(N) + ' n\\'est donc pas premier') + '.'\n bonneReponse = 'non'\n break\n case 6: // produit de deux nombres premiers inférieurs à 100\n // rang du premier facteur premier\n r1 = randint(0, 24)\n // rang du second facteur premier\n r2 = randint(0, 24)\n prime1 = prems[r1] // on tire un nombre premier inférieur à 100, il n'y en a que 25!\n prime2 = prems[r2] // on tire un autre nombre premier inférieur à 100, ça peut être le même qu'avant!\n N = prime1 + '$\\\\times$' + prime2\n texte = N\n texteCorr = `${N} est le produit de ${prime1} et de ${prime2}, il admet donc au moins `\n if (prime1 === prime2) {\n texteCorr += `trois divisieurs qui sont 1, ${prime1} et lui-même ${N}=${nombreAvecEspace(prime1 * prime2)}, `\n } else {\n texteCorr += `quatre diviseurs qui sont 1, ${prime1}, ${prime2} et lui-même ${N}=${nombreAvecEspace(prime1 * prime2)}, `\n }\n texteCorr += texteEnCouleurEtGras(`${N} = ` + nombreAvecEspace(prime1 * prime2) + ' n\\'est donc pas premier') + '.'\n bonneReponse = 'non'\n break\n case 7: // nombre premier inférieur à 529, si le nombre premier dépasse 100 on affiche le coup de pouce\n // rang du nombre premier choisi\n r = randint(25, prems.length - 1)\n N = prems[r] // on choisit un nombre premier inférieur à 529\n\n if (N > 100) {\n this.sup2 = true\n } else {\n this.sup2 = false\n }\n texte = N + ''\n r = 0\n tabPremiersATester = []\n while (prems[r] ** 2 < N) {\n tabPremiersATester.push(prems[r])\n r++\n }\n texteCorr = `En effectuant la division euclidienne de ${N} par tous les nombres premiers inférieurs à $\\\\sqrt{${N}}$, c'est-à-dire par `\n if (N === 2 || N === 3) {\n texteCorr += 'aucun nombre dans le cas présent, le reste n\\'est jamais nul,'\n } else {\n texteCorr += 'les nombres '\n texteCorr += tabPremiersATester[0]\n for (let k = 1; k < tabPremiersATester.length - 1; k++) {\n texteCorr += ', ' + tabPremiersATester[k]\n }\n texteCorr += ' et ' + tabPremiersATester[tabPremiersATester.length - 1]\n texteCorr += ', le reste n\\'est jamais nul,'\n }\n texteCorr += ' ' + texteEnCouleurEtGras(nombreAvecEspace(N) + ' est donc un nombre premier') + '.'\n\n bonneReponse = 'oui'\n break\n case 8: // nombre premier inférieur à 100 pour permettre les tests de divisibilité sans calculatrice\n // rang du nombre premier choisi\n r = randint(6, 24)\n N = prems[r] // on choisit un nombre premier inférieur à 100\n texte = N + ''\n r = 0\n tabPremiersATester = []\n while (prems[r] ** 2 < N) {\n tabPremiersATester.push(prems[r])\n r++\n }\n texteCorr = this.level === 1 ? texteEnCouleurEtGras(nombreAvecEspace(N) + ' est un nombre premier') + ' car il fait partie de la liste des nombres premiers à connaître. Sinon, sans cette connaissance, il y a la méthode suivante.<br>' : ''\n texteCorr += `En effectuant la division euclidienne de ${N} par tous les nombres premiers inférieurs à $\\\\sqrt{${N}}$, c'est-à-dire par `\n if (N === 2 || N === 3) {\n texteCorr += 'aucun nombre dans le cas présent, le reste n\\'est jamais nul,'\n } else {\n texteCorr += 'les nombres '\n texteCorr += tabPremiersATester[0]\n for (let k = 1; k < tabPremiersATester.length - 1; k++) {\n texteCorr += ', ' + tabPremiersATester[k]\n }\n texteCorr += ' et ' + tabPremiersATester[tabPremiersATester.length - 1]\n texteCorr += ', le reste n\\'est jamais nul,'\n }\n texteCorr += ' ' + texteEnCouleurEtGras(nombreAvecEspace(N) + ' est donc un nombre premier') + '.'\n bonneReponse = 'oui'\n break\n }\n if (this.interactif || context.isAmc) {\n this.autoCorrection[i] = {}\n this.autoCorrection[i].options = { ordered: true }\n this.autoCorrection[i].enonce = `${texte}\\n`\n this.autoCorrection[i].propositions = [\n {\n texte: 'est premier',\n statut: bonneReponse !== 'non'\n },\n {\n texte: 'n\\'est pas premier',\n statut: bonneReponse !== 'oui'\n }\n ]\n if (this.interactif) {\n texte += propositionsQcm(this, i).texte\n }\n }\n if (this.questionJamaisPosee(i, N)) { // 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 = ['Niveau de difficulté', 2, '1 : Sans calculatrice\\n2 : Avec calculatrice']\n this.besoinFormulaire2CaseACocher = ['Afficher la liste des nombres premiers inférieurs à 100']\n this.besoinFormulaire3CaseACocher = ['Ne proposer que des nombres premiers inférieurs à 100']\n}\n"],"names":["titre","interactifReady","interactifType","amcReady","amcType","uuid","ref","PremierOuPas","Exercice","context","prems","cribleEratostheneN","typesDeQuestions","modalPdf","modalVideo","typesDeQuestionsDisponibles","shuffle","listeTypeDeQuestions","combinaisonListesSansChangerOrdre","stringRappel","k","i","texte","texteCorr","r1","r2","prime1","prime2","cpt","N","r","tabPremiersATester","sum","Nlongueur","N1","N1longueur","sum1","evenSum","oddSum","bonneReponse","warnMessage","randint","nombreAvecEspace","texteEnCouleurEtGras","m","propositionsQcm","listeQuestionsToContenu"],"mappings":"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"}