A320. ABSOLUMENT PREMIERS
Un nombre premier est dit « absolu » (NPA) si toute permutation de ses chiffres donne aussi un nombre premier (par exemple 13 et sa permutation 31).
Q1 : Démontrer qu'un NPA ne comporte jamais quatre chiffres distincts ou plus ni trois fois le chiffre x et deux fois le chiffre y, avec x différent de y.
Q2 : Pour les plus audacieux : démontrer qu'un NPA a au plus deux chiffres distincts.
Q3 : Dénombrer les NPA inférieurs à 1015
Source : d'après Olympiades de mathématiques en URSS.
Solution proposée par Claudio Baiocchi
Soit N un NPA. Les cas de N = 2 et N = 5 mis à part, seuls les chiffres 1, 3, 7 et 9 peuvent paraître dans N: la présence de tout autre chiffre, après permutation convenable, donne lieu à un nombre pair ou à un multiple de 5. Cela fixé, toute la discussion sera basée sur la divisibilité par 7.
Une famille
F
de nombres sera dite complète si les restes de la division par 7 des éléments de la famille donnent l’ensemble {0, 1, 2, 3, 4, 5, 6} tout entier. On remarquera que, pour tout nombre N et toute famille complèteF
, un au moins des nombres du type N+F avec F inF
est un multiple de 7.Un simple programme pour ordinateur montre que, pour tout triplet {a, b, c} de nombres distincts choisis dans {1, 3, 7, 9}, la famille
F
:= {abc, acb, bac, bca, cab, cba} est complète. En particulier si un tel triplet est inclus dans les chiffres d'un nombre N, parmi les permutations de N on trouve, pour M convenable, tous les nombres du type M * 103 + F avec F enF
; donc au moins un nombre multiple de 7, ce qui entraine que N ne peut pas être un NPA. On a donc démontré la propriété Q2; la partie restante de Q1 s'obtient de façon analogue, grâce au fait que, pour tout couple {a,b} de nombres distincts choisis dans {1, 3, 7, 9}, est complète la familleF
:= {aaabb, aabab, aabba, abaab, ababa, abbaa, baaab, baaba, babaa, bbaaa}.Remarque. Des langages de programmation admettent des cycles du type «pour x dans {1, 3, 7, 9} ...». Si le langage utilisé n'admet pas de tels cycles les choses deviennent un peu plus compliquées,à moins que, comme dans le cas présent, la valeur de x n'intervient que modulo 7. Dans ce cas, puisque (modulo 7) on a 7=0 et 9=2, il suffit de faire le cycle «pour x allant de 0 à 3...»
Pour ce qui concerne la question Q3 on va séparer les cas en fonction du nombre de chiffres.On peut naturellement se borner aux nombres tels que les chiffres, de gauche à droite, paraissent en ordre non décroissant.
1. Un seul chiffre: 2, 3, 5 et 7.
2. Deux chiffres: on cherche parmi aa et ab avec a<b; on trouve uniquement 11, 13, 17, 37 et 79.
3. Trois chiffres: cherchant parmi aaa , aab et abb avec a<b on trouve 113, 199, 337.
4. Quatre chiffres et plus: bien que la stratégie des famille s complètes puisse être adaptée à bien de sous-cases, la façon la plus simple de traiter le problème est sans doute l’emploi d’un programme pour
ordinateur en faisant attention à choisir un langage qui permet de traiter des entiers d’au moins 16 chiffres (l’exemple suivant est écrit en JavaScript); le résultat est que aucun NPA n’existe dans ce rang.
---
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Numbres Premiers Absolus</title>
</head><body>
<script type="text/javascript"><!-- function ppd(x){
// Pour tout argument x (avec x entier, x>1) ppd(x) est le Plus Petit Diviseur de x x=eval(x)
if( x <= 1 || x != Math.floor(x) ){
alert('function ppd: l\'argument vaut '+x+'; mais il doit être un entier > 1 !!');return 'No!' }
var r=Math.sqrt(x), q=2, y if( x % 2 == 0 ) { return 2 } if( x % 3 == 0 ) { return 3 } if( x % 5 == 0 ) { return 5 } for( y=7; y<=r; y+=q ) {
q = 6-q ; if( x % y == 0 ){ return y } }
return x }
function estPremier(x){ return x==ppd(x) } function npa(x,y,nc){
// Pour nc chiffres, toutes égales à y, sauf une qui vaut x var j, k, n
for(j=0;j<nc;j++){
n=0; for(k=0;k<nc;k++) {n*=10;n+=(k==j)?x:y}
if( !estPremier(n) ) return 0 }
return n }
var s='1', z
for(numC=2;numC<18;numC++) {
document.write('<br>Nombre de chiffres = '+numC.toString()+'<br>') s+='1'; if(estPremier(s)) {document.write(s+'; ')}
z=npa(1,3,numC); if(z>0) {document.write(z.toString()+'; ')}
z=npa(1,7,numC); if(z>0) {document.write(z.toString()+'; ')}
z=npa(1,9,numC); if(z>0) {document.write(z.toString()+'; ')}
if(numC>2) {
z=npa(3,1,numC); if(z>0) {document.write(z.toString()+'; ')}
}
z=npa(3,7,numC); if(z>0) {document.write(z.toString()+'; ')}
if(numC>2) {
z=npa(7,1,numC); if(z>0) {document.write(z.toString()+'; ')}
}
if(numC>2) {
z=npa(7,3,numC); if(z>0) {document.write(z.toString()+'; ')}
}
z=npa(7,9,numC); if(z>0) {document.write(z.toString()+'; ')}
document.write('<br>') }
//--></script>
</body></html>