HEX
Server: Apache
System: Linux vps.mmtprep.com 4.18.0-477.21.1.el8_8.x86_64 #1 SMP Thu Aug 10 13:51:50 EDT 2023 x86_64
User: mmtprep (1001)
PHP: 8.1.34
Disabled: exec,passthru,shell_exec,system
Upload Files
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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"}