// // File $webw-02.js.txt // // Provare a verificare questi piuttosto // rari di livello 10: // 26089808579; 65639153579;372339715439; // 551652886619;570901515029;624758088239; // 721438465439; // E riscoprire 665043081119 di livello 11 // E ritrovare 554688278429 di livello 12 // Oppure per fare indagini facili trovare // questi di livello 9 non rarissimo: // 85864769, 198479579, 305192579, // 2400025739, 3176388269, 3505717049, // 3935196059, 7606886429, 7755909149, // 10378311899, 16744125509, 17029114499, // 17117793089, 17574340739, 43390196519, // 45424068359, 79929642209, 81973101629, // 93060105269, 97897041659, 110361035069, // 111179711039, 118403690789, 120709081019, // 131278307159, 131875098059, 142932386609, // 157836272879, 175839579299, 190128591179, // 196515584099, 202517277689, 213006573779, // 235117849229, 250606935569, 260559395669, // 276089790659, 278780338979, 306855109859, // 316592176889, 822712658459, 832433678339; // 903003240809, 914948679899, 921670695089, // 923672110349, 952514740319, 968545735169, // 985998048419, 988854703409, 998732016809, // 1011314578979,1015533793229,1040784507179, // 1044351916739; // // ========================================== // // Cerca numeri primi di alto livello. // var $livmin=9; var $pt=[3,5,7,11,13,17,19,23,29,31, 37,41,43,47,53,59,61,67,71, 73,79,83,89,97]; // // Controlla se N e i suoi discendenti // sono divisibili da piccoli primi... // Se si' e' inutile studiarli. // var $pretest=function(N,liv){ var j,k,NL,nt; NL=[Math.max(5,Math.round(N))]; if(NL[0]%2==0) return false; nt=$pt.length; for(k=1;liv>k;k++){ NL[k]=2*NL[k-1]+1;} for(j=0;nt>j;j++){ for(k=0;liv>k;k++){ if(NL[k]%$pt[j]==0){ return false;}}} return true;} // var $propost=["0\u2190 Passi", " in$FaLavoro riceve ",$ricevuto,0]; var $xprim=[]; // var $FaLavoro=function(){ var kkv,nnv=1000; var h,k,xpr,conto; var ww,mda,buono,maxww=1;topww=0; // var sup=function(sp){ var mp,rr=0; var cp=function(np,pk){ var k,kk=pk,vp,nf; nf=2+Math.round(Math.sqrt(np)); if(nf%2==0)nf++;vp=true; for(k=3;nf>k;k+=2){ if(np%k==0){vp=false;break}} if(vp)kk=cp(np*2+1,pk+1); return kk} mp=Math.max(5,Math.round(sp)); if(sp%2==1){rr=cp(mp,0);} return [mp,rr];} // mda=parseInt($ricevuto); if(isNaN(mda)){mda=101;} if(mda%2==0)mda++; // // applica solo interi dispari // che abbiano 9 come ultima cifra. // mda=mda+9-mda%10; xpr=mda; kkv=100000*nnv; for(h=0;nnv>h;h++){ for(k=0;kkv>k;k++){ xpr+=10; buono=$pretest(xpr,$livmin); if(buono){ ww=sup(xpr); if(ww[1]>=maxww){ topww=ww[0]; maxww=ww[1]; $xprim[$xprim.length]= [topww,maxww]; $propost[$propost.length-1]= "{"+$xprim.join("; ")+"}" conto=1+parseInt($propost[0]); $propost[0]=conto+ "\u2190 Passi" postMessage($propost);} if(ww[1]+6>=maxww){ $forseva("Passo k: "+k+ " Ora al livello: "+ maxww+" di primo: "+topww+ " Esaminando: "+xpr);} } } $forseva("Fase: "+h+" Ora livello: "+ maxww+" di primo: "+topww+ " Esaminando: "+xpr);} conto=parseInt($propost[0]); $propost[0]=conto+"\u2190 Fine" postMessage($propost); return true;} // // ========================================= // // Ecco come va fatto il file del Web Worker // che spedisce, al file che lo attiva, // i risultati ottenuti. // // Usa il metodo onmessage per ricevere // dati dal file che lo ha attivato. // var $ricevuto=0; var $quandoprima=0,$frequenza=1500; onmessage=function(eccoqua){ $ricevuto=eccoqua.data;} // // Se il messaggio postato e' una Array, // e' un risultato importante e se invece // e' una stringa e' solo una segnalazione // fatta per segnalare che i calcoli // sono in corso, non bloccati. // var $forseva=function(cosa){ var nunc=0,data=new Date(); nunc=data.getTime(); if($frequenza+ $quandoprima>nunc)return false; postMessage(cosa); $quandoprima=nunc; return true} // // Prima di lavorare perde un po' di tempo // per aspettare i messaggi che sono // stati inviati. Altrimenti la onmessage // non riesce a trascrivere i messaggi. // function PerIniziare() { setTimeout("$FaLavoro()",1000);} // PerIniziare(); // //