Sie sind auf Seite 1von 21

Quelques

J.B. Dadet DIASOLUKA Luyalu Nzoyifuanga


+243 - 851278216 - 899508675 - 991239212 - 902263541 - 813572818

XI. Suite et Nombres de Kaprekar :

Algorithme de Kaprekar : découvert en 1949 par le ma-


thématicien indien Dattatreya Ramachandra Kaprekar
(1905-1988 = 83 ans) pour les nombres de 4 chiffres,
mais peut être généralisé à tous les nombres.

L’algorithme de Kaprekar consiste à un nombre quel-


conque « n » un autre nombre « K(n) » généré de la fa-
çon suivante :

 On considère les chiffres du nombre « n », écrits


dans une base quelconque (généralement la base
de numération décimale 10) ;

 On forme le nombre « n1 » en arrangeant ces


chiffres dans l’ordre croissant, et le nombre « n2 »
en les arrangeant dans l’ordre décroissant ;

 On pose « K(n) » = n2 – n1 ;
J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
 On itère le processus avec « K(n) jusqu’à trouver un
identique à son propre « K(n).

Ière version d’un utilitaire de nbs de Kaprekar :

<script type="text/javascript"> "use strict";


const cl = console.log;
// Seulement les chiffres significatifs sans zéro au début

let tri = p => {


let a = [], len = p.length;
for(let k=0 ; k<len ; k++){ a[k]=p.charAt(k) };
a.sort();
let n = "";
for(let k=0 ; k<len ; k++) n+=a[k];
return n
}

let k,n1,n2,cptr,prev ;
n2=k="";
cptr=prev=0;

n1 = prompt("Donnez un nombre entier, p. ex 5245\n" +


"Préférez les nombres de moins de 5 digits",
Math.round(Math.random()*10000).toString());
let len = n1.length;
cl(`Le nombre « n » proposé est : ${n1}\n`);

n1 = tri(n1);
while(k!=n1){
for(var idx=0 ; idx<len ; idx++) {
n2+=n1.charAt(len- idx-1) ;
k = Math.abs(n1-n2);
}
cl(`${++cptr}. (n2=${n2}) - (n1=${n1}) = K = ${k}\n`);
if(prev==k) break;
prev=k ; n1 = k.toString() ; n2 = k = "";
n1 = tri(n1);
}
Qqs Applis Pratiques JS -2/21- mardi, 22. janvier 2019 (9:04 )
J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
cl(`${"=".repeat(26)} Sortie->\n${cptr}. `+
`(n2=${n2}) - (n1=${n1}) = K = ${k}\n`);
</script>

IIè version d’un utilitaire de nbs de Kaprekar :

<script type="text/javascript"> "use strict";


const cl = console.log;
// Toujours le même nombre de digits, quit à ajouter des
zéros au début.

let tri = p => {


let a = [], len = p.length;
for(let k=0 ; k<len ; k++){ a[k]=p.charAt(k) };
a.sort();
let n = "";
for(let k=0 ; k<len ; k++) n+=a[k];
Qqs Applis Pratiques JS -3/21- mardi, 22. janvier 2019 (9:04 )
J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
return n
}

let k,n,n1,n2,cptr,prev,pos,deja,aprev=[] ;
n2=k="";
cptr=prev=0;

n=n1= prompt("Donnez un nombre entier, p. ex 57443\n" +


"Préférez les nombres de moins de 5 digits",
Math.round(Math.random()*100000).toString());
let len = n1.length;
cl(`Le nombre « n » proposé est : ${n1}\n`);

n1 = tri(n1); pos=cptr=prev=deja=0;
while(k!=n1){
for(var idx=0 ; idx<len ; idx++) {
n2+=n1.charAt(len- idx-1) ;
k = Math.abs(n1-n2);
}
cl(`${++cptr}. (n2=${n2}) - (n1=${n1}) = K = ${k}\n`);
if(prev==k) break;
for(let q=0,l=aprev.length ; q<l ; q++){
if(k==aprev[q]) {
deja++ ; pos=q;
}
}
aprev[cptr]=k;
for(let x=k.toString().length
; x<Math.floor(Math.log10(n1)+1)
; x++) {
k=('0'+k).toString()
}
if(deja) break;
prev=k ; n1=k.toString() ; n2=k="" ; n1=tri(n1);
}
if (deja) cl(`${n} = NonKaprekar :\n${cptr}. (n2 = ${n2})
- (n1 = ${n1}) = K = ${k}\n`);
else cl(`${n} ${"=".repeat(19)} Kaprekar->\n${cptr}. `+
`(n2=${n2}) - (n1=${n1}) = K = ${k}\n`);
</script>

Qqs Applis Pratiques JS -4/21- mardi, 22. janvier 2019 (9:04 )


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII

IIIè version d’un utilitaire de nbs de Kaprekar :

<div style='text-
aling:center'><ruby><ruby>N1<rt>Croissant</rt><span
style="color:red">N2</span><rt><span
style="color:red">Décroissant</span></rt>L<rt>K=Diff</rt><
/ruby><rt><u style="font-size:16px;color:blue">Suite de
Kaprekar </u>
</ruby><div><br>

<form name="formn">
min. <input class="min" value=5245><br>
Max <input class="Max"><br>
Qtté <input id="qtt" value="1"><br>
&Kaprekar Strict
<input type=checkbox name="wkStrict"><br>
Nombre-Titre <input type=checkbox name="nbTitl">
<br>Verbose <input type=checkbox class="verbose">
<br><button
Qqs Applis Pratiques JS -5/21- mardi, 22. janvier 2019 (9:04 )
J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
onclick='javascript:fgo()'
style="width:200;background:#ffe067">GO</button>
</form>

<script type="text/javascript"> "use strict";

function fgo(){
let debut=new Date(),
outp = window.open();
const cl=outp.console.log,
dw=outp.document;

const arrange = p => {


let n1 = Object.values(String(p)).sort()
.join().replace(/,/g,e=>"") ,

n2 = Object.values(String(p)).sort()
.reverse().join().replace(/,/g,e=>"");
return {n1,n2}
}

let min =
Number(document.querySelector(".min").value),

Max =
Number(document.querySelector(".Max").value),

wkStrict =
document.formn.wkStrict.checked?true:false,

nbTitl =
document.formn.nbTitl.checked?true:false,

qtt =
Number(Max-min+1>0 ? Max-min+1 : false ||
document.getElementById("qtt").value),

verbose = (
qtt<=3 ||
document.querySelector(".verbose").checked)
? true
: false,

prevK=min, sum, t1="", t2="", crlf="";

Qqs Applis Pratiques JS -6/21- mardi, 22. janvier 2019 (9:04 )


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
for(let nk=min,qk=nk+qtt,c=1;nk<qk;nk++){
let deja=[], flagk=1, t="",cptr=0,
ideja=0,
n=nk.toString(), kDiff=0, prev, n1, n2;

if(nbTitl)
t=`${"*".repeat(16)} ${nk} `+
`${"*".repeat(16)} (${c++})`,
crlf="\n";

sum="";
while(prev!==kDiff){
prev=kDiff;
t1="", t2="";
let r=arrange(n);
n1=r.n1,
n2=r.n2;

t1=n1 , t2=n2;

[t1,t2]=[t1,t2].sort();
t1=t1.padStart(
Math.floor(Math.log10(nk)+1),"0"
).toString();

kDiff=Math.abs(t2 - t1);

if(verbose)
sum +=
`${++cptr}. t1 = ${t1} --- t2 = ${t2}
| ` +
`k = ${kDiff}\n`;

n=kDiff;

var idx=deja.findIndex(x => x==kDiff)


if(idx<0) {
deja[ideja++]=kDiff;
}
else break;
}

if((kDiff!=0) && (
arrange(kDiff).n1==arrange(t1).n1)) {

Qqs Applis Pratiques JS -7/21- mardi, 22. janvier 2019 (9:04 )


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
cl(`${t}${crlf}##### *${nk}* ` +
`EST un NOMBRE DE KAPREKAR +++++ `+
`d=${nk-prevK}`+
`\n${sum}`) ,

prevK=nk;

}
else {
flagk=0;
cl(`${t}\n${"-".repeat(5)} ${nk} ` +
`N'EST PAS un nombre de Kaprekar`);

cl(`Longueur du CYCLE = ` +
`${ideja-idx}\n${sum}`);
}

if(wkStrict) {
if(
(kDiff!=0) &&
(arrange(nk).n1==arrange(kDiff).n1)) {

cl(`>>> *${nk}* ` +
`EST un ` +
`NOMBRE DE KAPREKAR STRICT <<<\n`+
`${arrange(nk).n1}==`+
`${arrange(kDiff).n1}`);

}
else {

cl(`${nk} N'EST PAS ` +


`un nombre de Kaprekar Strict`);
cl(
`k (${arrange(nk).n1}) != `+
`K (${arrange(kDiff).n1})`);

if(flagk)cl(
`Longueur du CYCLE = ${ideja-
idx}\n`);
}
}
}
cl(`${"=".repeat(45)}`)
cl(`Début = ${debut.toLocaleString()}.`)
Qqs Applis Pratiques JS -8/21- mardi, 22. janvier 2019 (9:04 )
J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
cl(`Durée = ${(new Date()-debut)/1000} ms.`)
cl(`Fin = ${new Date().toLocaleString()}.`)
dw.write(`Activez la console du browser avec `+
`< F12 > ou < CRTL-SHIFT-I > ou < CRTL-SHIFT-K
>`);
}
</script>

<!--abbr title="pop-up de abbr">Abbr</abbr>


<br><br><ruby>A<rt>o</ruby> Å
<br><br><ruby>B<rt>annotation</ruby>
<ruby>BASE<rt>annotation 1<rt>annotation 2</ruby>
<ruby>B<rt>a<rt>a</ruby><ruby>A<rt>a<rt>a</ruby>
<ruby>S<rt>a<rt>a</ruby><ruby>E<rt>a<rt>a</ruby>

<br><br><ruby>
♥ <rt> Heart <rt lang=fr> Cœur </rt>
☘ <rt> Shamrock <rt lang=fr> Trèfle </rt>
✶ <rt> Star <rt lang=fr> Étoile </rt>
</ruby>

<br><br><ruby><ruby>B<rt>a</rt>A<rt>n</rt>S<rt>t</rt>E<rt>
n</rt></ruby><rt>annotation</ruby>

<div style='text-
aling:center'><ruby><ruby>N1<rt>Croissant</rt><span
style="color:red">N2</span><rt><span
style="color:red">Décroissant</span></rt>L<rt>K=Diff</rt><
/ruby><rt><u style="font-size:16px;color:blue">Suite de
Kaprekar </u>
</ruby><div>

<!--nav>
<ul>
<li>
<a href="/aHref" class="cAnch"
id='iAnch' name='nAnch'>
Hypertexte
</a>
</li>
</ul>

Qqs Applis Pratiques JS -9/21- mardi, 22. janvier 2019 (9:04 )


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
</nav>

<script> "use strict"; const cl=console.log;


let r = document.querySelector(".cAnch");
cl(r.href,r.name,r.id,r.textContent,r.text);
</script>

Exécution :

Après avoir cliqué sur « Go », vous serez normalement


automatiquement redirigé vers la nouvelle fenêtre qui
vient de s’ouvrir et activez-y la console du navigateur
avec par exemple < CTRL-SHIFT-K > si vous êtes dans
Firefox ou < CTRL-SHIFT-I > ou < F12 > selon le navi-
gateur.

Avec les deux options ci-dessous « Max » et « Qtté » co-


chées, le maximum spécifié (« Max ») a préséance sur
(« Qtté ») :

Qqs Applis Pratiques JS -10/21- mardi, 22. janvier 2019 (9:04 )


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII

Qqs Applis Pratiques JS -11/21- mardi, 22. janvier 2019 (9:04 )


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII

Qqs Applis Pratiques JS -12/21- mardi, 22. janvier 2019 (9:04 )


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII

Qqs Applis Pratiques JS -13/21- mardi, 22. janvier 2019 (9:04 )


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
XII. Techniques pour programmer le PGCD de deux
entiers :

A. Par le biais des plus petits diviseurs communs :

1 Les deux entiers dans une array :

<script type="text/javascript"> "use strict";


var r,d,n1=2040,n2=39960
function pgcd(o){
o=o.sort().reverse() // n1 > n2
console.log(Object.values(o))
var pq=1;
for(var p=2 ; p<o[0]/2 ; p++){
for(var k=2 ; k<o[0]/2 ; k++){
if(!(o[0]%k) && !(o[1]%k)){
pq*=k; o=o.map(x=>x/k)
console.log(pq+" "+k+" "+o)
}
}
}
return pq
}
r=pgcd([n1,n2]) // L’array des deux entiers.
console.log("pgcd ("+n1+" & "+n2+") = "+
r+" ("+n1/r+" & "+n2/r+") ")
</script>

// Array [ 39960, 2040 ]


// 2 2 19980,1020
// 6 3 6660,340
// 24 4 1665,85
// 120 5 333,17
// pgcd (2040 & 39960) = 120 (17 & 333)

2 Les deux entiers dans un littéral d’objet :


Qqs Applis Pratiques JS -14/21- mardi, 22. janvier 2019 (9:04 )
J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII

<script type="text/javascript"> "use strict";


var r,d,n1=4020, n2=2040 // n1 >2
function pgcd(o){
console.log(Object.values(o))
var pq=1;
for(var p=2 ; p<o.n1/2 ; p++){
for(var k=2 ; k<o.n1/2 ; k++){
if(!(o.n1%k) && !(o.n2%k)){
pq*=k; o.n1/=k, o.n2/=k
console.log(pq+" "+k+" "+Object.values(o))
}
}
}
return pq
}
r=pgcd(d={n1:n1,n2:n2})
console.log("pgcd ("+n1+" & "+n2+") = "+
r+" ("+n1/r+" & "+n2/r+") ")
</script>

// Array [ 4020, 2040 ]


// 2 2 2010,1020
// 6 3 670,340
// 30 5 134,68
// 60 2 67,34
// pgcd (4020 & 2040) = 60 (67 & 34)

3 Plus simple (avec des primitives) :

<script type="text/javascript"> "use strict";


var r,d,n1,n2
function pgcd(n1,n2){
console.log(n1,n2)
var pq=1;
for(var p=2 ; p<n1/2 ; p++){
for(var k=2 ; k<n1/2 ; k++){
if(!(n1%k) && !(n2%k)){
pq*=k; n1/=k, n2/=k

Qqs Applis Pratiques JS -15/21- mardi, 22. janvier 2019 (9:04 )


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
console.log(pq+" "+k+" "+n1+" "+n2)
}
}
}
return pq
}
r=pgcd(n1=Math.round(Math.random()*1e4),
n2=Math.round(Math.random()*1e5))
console.log("pgcd ("+n1+" & "+n2+") = "+
r+" ("+n1/r+" & "+n2/r+") ")
</script>

// 1792 33348
// 2 2 896 16674
// 14 7 128 2382
// 28 2 64 1191
// pgcd (1792 & 33348) = 28 (64 & 1191)

B. Selon les deux principes :

PGCD ( a , b ) = PGCD ( b , a mod b )


et
PGCD ( a , 0 ) = a :

1 Les deux entiers dans une array :

<script type="text/javascript"> "use strict";


// PGCD(a,b) = PGCD (b,a mod b) et PGCD(a,0) = a.
var r,d,
n1=2040,n2=39972 // Les deux entiers
function pgcd(a){
a=asort(a) // n1 > n2
console.log(Object.values(a),+" "+n1+" "+n2)
var pq=1;
while(a[1]) a=[a[1], a[0]%a[1]] , console.log(a)
return a[0]

Qqs Applis Pratiques JS -16/21- mardi, 22. janvier 2019 (9:04 )


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
}
r=pgcd([n1,n2]) // L’array des deux entiers.
console.log("pgcd ("+n1+" & "+n2+") = "+
r+" ("+n1/r+" & "+n2/r+") ")

function asort(a){
return a.sort().reverse() // n1 > n2
}
</script>

// Array [ 39972, 2040 ] 2040 39972 test.html:7:4


// Array [ 2040, 1212 ] test.html:11:10
// Array [ 1212, 828 ] test.html:11:10
// Array [ 828, 384 ] test.html:11:10
// Array [ 384, 60 ] test.html:11:10
// Array [ 60, 24 ] test.html:11:10
// Array [ 24, 12 ] test.html:11:10
// Array [ 12, 0 ] test.html:11:10
// pgcd (2040 & 39972) = 12 (170 & 3331) test.html:17:2

Qqs Applis Pratiques JS -17/21- mardi, 22. janvier 2019 (9:04 )


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII

Kinshasa, le mardi 22 janvier 2019 - 9:04:07 AM

Mots-clés :
JAVASCRIPT, Programmation Internet, keys, va-
lues, parseInt, parseFloat, toString, fonction flé-
chée, sloppy mode, mode strict, prototype, objet
ordinaire, objet exotique, objet standard, built-in
object, Scope, contexte d’exécution, Domaine,
Portée, Étendue, Visibilité, Accessibilité, durée de
vie, Es10, ECMASCRIPT 2019, LiveScript, extra-
dimensionnels, entités éthériques non-
biologiques, TC39, ECMA, Kaprekar

Qqs Applis Pratiques JS -18/21- mardi, 22. janvier 2019 (9:04 )


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
DIASOLUKA Nz. Luyalu
Docteur en Médecine, Chirurgie & Accouchements (1977),
CNOM : 0866 - Spécialiste en ophtalmologie (1980)
Études humanités : Scientifique - Mathématiques & Physique.
Informaticien-amateur, Programmeur et WebMaster.

Chercheur indépendant, autonome et autofinancé, bénévole,


sans aucun conflit d’intérêt ou liens d'intérêts ou contrainte
promotionnelle avec qui qu’il soit ou quelqu’organisme ou
institution / organisation que ce soit, étatique, paraétatique ou
privé, industriel ou commercial en relation avec le sujet
présenté.

+243 - 851278216 - 899508675 - 991239212 - 902263541 - 813572818

diasfb@mail2world.com

Autre Lecture :
https://www.scribd.com/document/374738470/Le-Plus-Grand-
Secret-de-La-Creation

D’autres publications pouvant aussi intéresser :

• https://www.scribd.com/document/377036251/Le-
Dosage-Des-Medicaments-en-Cac-Cas
• https://www.scribd.com/document/377035454/Le-
Hasard-Des-Thermometres-Non-contact-a-Infrarouge
• https://www.scribd.com/document/376222482/Petite-
Introduction-Aux-Fonctions-JavaScript
• https://www.scribd.com/document/376221919/La-Foi-
Qqs Applis Pratiques JS -19/21- mardi, 22. janvier 2019 (9:04 )
J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII
en-Jesus-Christ-Pour-Quoi-Faire
• https://www.scribd.com/document/375689778/Lacuite-
visuelle-angulaire
• https://www.scribd.com/document/375349851/La-
variable-This

https://www.scribd.com/document/375024162/Fonctions-
Imbriquees-en-JS
• https://www.scribd.com/document/374789297/Format-
Interne-Des-Objets-JavaScript

https://www.scribd.com/document/374788758/Iterations-
en-JavaScript
• https://www.scribd.com/document/374738470/Le-Plus-
Grand-Secret-de-La-Creation
• https://www.scribd.com/document/374597969/Nouvelle-
Formule-d-IMC-indice-de-doduite-Selon-Dr-Diasoluka
• https://www.scribd.com/document/373847209/Property-
Descriptors
• https://www.scribd.com/document/373833282/l-Objet-
Global-Window

https://www.scribd.com/document/372665249/Javascript-
Tome-II
• https://www.scribd.com/document/355291488/motilite-
oculaire-2
• https://www.scribd.com/document/355291239/motilite-
oculaire-I
• https://www.scribd.com/document/355290248/Script-d-
Analyses-Des-Reflexes-Pupillomoteurs

https://www.scribd.com/document/321168468/Renseigne
ments-Id-et-Anthropometriques

https://www.scribd.com/document/320856721/Emission-
31-Jul-2016
Qqs Applis Pratiques JS -20/21- mardi, 22. janvier 2019 (9:04 )
J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII

https://www.scribd.com/document/318182982/Complicati
on-Visuelle-du-Traitement-de-La-Malaria
• https://www.scribd.com/document/318180637/Rapport-
Entre-Oxymetrie-Et-Type-Respiration

https://www.scribd.com/document/315746265/Classificati
on-Des-Medicaments

https://www.scribd.com/document/315745909/Incongrue
nces-Heresies-et-Heterodoxies-de-la-Notion-de-Laboratoire
• https://www.scribd.com/document/315745725/Rapport-
Entre-Oxymetrie-Et-Type-Respiration

Qqs Applis Pratiques JS -21/21- mardi, 22. janvier 2019 (9:04 )

Das könnte Ihnen auch gefallen