/* auteur: COSMOS 2000 */
/* Date de création: 19/02/2004 */
/* Author: Dr Ron Knott:  ron@ronknott.com   January 2003 */
/* from the Runsums pages at www.mcs.surrey.ac.uk/Personal/R.Knott/runsums */
function f1x(n){return n.toString().length}
function f2x(n,f2x){
  if(f1x(n)==f2x)return n
  else return "                                                                   ".
              substring(0,f2x-f1x(n))+n.toString()
}
var MAXN=50000;
var a3x=new Array(),maxPi;
var seive=new Array(); 
var RSchar=".."; //".."
function report(msg){ document.Fresults.results.value+=msg+"\r" }
function f4x(){
 window.status="Recherche de a3x, veuillez patienter...";
 for(var i=0;seive[i]=2*i+1,seive[i]<=MAXN;i++){};
 maxPi=0;a3x[maxPi]=2;
 var si;
 for(si=1;seive[si]<=Math.sqrt(MAXN);si++)
  if(seive[si]>0)
    {for(i=si+seive[si];i<=(MAXN-1)/2;i+=seive[si])if(seive[i]>0)
       {seive[i]=-seive[i]}
     }
  for(si=1;seive[si]<=MAXN;si++)
     if(seive[si]>0)a3x[++maxPi]=seive[si];  
 //alert([a3x[0],a3x[1],a3x[2]]);
 window.status="Trouve "+maxPi+" a3x moindre que "+MAXN;
};
function f5x(n){  
  var maxPtotry=Math.ceil(Math.sqrt(n)), N=n, p,e,
      pripows=new Array(),fi= -1;
  for(var i=0;a3x[i]<=maxPtotry && a3x[i]<=N;i++)
     {
       if(N % a3x[i]==0)
        {p=a3x[i];e=0;
         do{N=N/p;e++}while(N%p==0);
         pripows[++fi]=[p,e];}
      };
  if(N>1)
      if(N<=MAXN*MAXN)pripows[++fi]=[N,1]  
      else {alert("Nombre est trop grand - désolé!");HALT()}
  //alert("f5x<-"+pripows);
  return pripows
}
function f6x(Zb){
  var s="", first=true;
  for(var i=0;i<Zb.length;i++)
    {for(var j=1;j<=Zb[i][1];j++)
        {if(first)first=false
         else s+=" x ";
         s+=Zb[i][0]}
    };
   if(Zb.length==1 && Zb[0][1]==1 && !isNaN(Zb[0][0]))s+=" (premier)";
   return s
};
function f7x(Zb){  
  if(Zb.length==0)return 1
  else return Math.pow(Zb[0][0],Zb[0][1])*f7x(Zb.slice(1))
};
function f8x(Zb,f){ 
  function subZbagapply(Zb,Pre,f) 
   {if(Zb.length==0)f(Pre)
    else {subZbagapply(Zb.slice(1),Pre,f) 
          for(var i=1;i<=Zb[0][1];i++)    
              subZbagapply(Zb.slice(1),Pre.concat([[Zb[0][0],i]]),f)
          }
    }
  subZbagapply(Zb,[],f) 
};
function f10x(a,b)
 {return (a%2==1 && b%2==0 || a%2==0 && b%2==1)}
function f11x(N){
    function g(zb){
       var f1=f7x(zb);
       var f2=N/f1;
       if(f1<=f2  && f10x(f1,f2))
          appendRS( (f2-(f1-1))/2, (f2+f1-1)/2 )
    };
    f8x(f5x(N),g) 
};
function f12x(n){
  var f=f5x(n);  //alert("f12x: "+f);
  var nrs=1;
  for(var i=0;i<f.length;i++)  
       if(f[i][0]>2)nrs=nrs*(f[i][1]+1);
  return nrs
};
var RS=new Array();  
function appendRS(a,b){ 
  RS[RS.length]=[a,b]}
function RStoString(){
  var s="";
  for(var i=0;i<RS.length;i++)
       s=s+
       (RS[i][0]==RS[i][1] 
        ? RS[i][0]
        : RS[i][0]+RSchar+RS[i][1])
        +
       (i+1<RS.length?"=":"")
   return s
};
function sumbetween(lo,hi){  //OK if lo==hi
   return (hi+lo)*(hi-lo+1)/2  };
function checkRS(N){
  for(var i=0;i<RS.length;i++)
  {if( sumbetween( RS[i][0], RS[i][1]) != N)
      alert("Erreur SS!  Somme "+RS[i][0]+".."+RS[i][1]+" != "+N)
  }
};

function evalit(expr){   with(Math){return (eval(expr))} };
function isInt(s){ return Math.round(s)==s };
function validateInput(x,Which){
  if(isEmpty(x)){alert('S.V.P. entrez un nombre pour la '+Which+" valeur.");return Number.NaN} ;
  var i=parseInt(x);
  if(isNaN(i)){alert("La "+Which+" valeur pas un nombre propre.\rS.V.P. saisir de nouveau.");
      return Number.NaN}
  if(x.match(/[^0-9 \t\n\r\f\v]/) != null)
        {alert("Votre "+Which+" valeur pas un nombre entier (chiffres seuls).\rS.V.P. saisir de nouveau.");
        return Number.NaN} 
  else return i
}
function checkrange(i,Which,Min,Max){ 
  if(! isNaN(Min) && i<Min){alert("Le "+Which+" nombre est trop petit (minimum est "+Min+")");
    return false}
  else if(!isNaN(Max) && i>Max){alert("Le "+Which+" nombre est trop grand (maximum est "+Max+")");
    return false }
  else return true
}
function findsum()
{ var lo=validateInput(document.runsumForm.n.value,"'de'");
  if(isNaN(lo))return;
  var  hi=validateInput((document.runsumForm.upto.value),"'vers max'");
  if(isNaN(hi))return;
  if(lo>hi){var x=lo;lo=hi;hi=x};
   report("La somme de tous les nombres de "+lo+" à "+hi+" est "+ sumbetween(lo,hi));
};
function findrunsums(i,what)
{var c=f12x(i);
 var ans=f2x(i,5)+ " a "+c+" somme de suite"+ (c==1?"":"s");
 if(what=='show'){runsumsOf(i); ans=ans +": "+ RStoString(RS)};
 report(ans)                          
}
function RSorder(R1,R2){ return R1[0]-R2[0] }
function runsumsOf(N){ 
 RS.length=0;
 f11x(2*N);
 RS=RS.sort(RSorder); checkRS(N);
}
function factorThem()  /* SHOW the PRIME FACTORS of nbs in range lo..hi */
{ with(document.runsumForm)
  {var lo=validateInput(n.value,"S");
   if(isNaN(lo)){}
   else if(!checkrange(lo,"S",0,MAXN)){}
         else {hi=upto.value;
               if( isNaN(hi) ||  checkrange(hi,"T",0,MAXN) )
                  {if( isNaN(hi) || hi<lo )hi=lo;
                   for(var i=lo;i<=hi;i++)
                     document.Fresults.results.value+=i+" = "+f6x(f5x(i)) +"\r"
} }           }   };                    
function initialise(){
  document.runsumForm.reset();
 f4x();
}
var leastRS=new Array(
[],[],[1],[2],[1,1],[4],[2,1],[6],[1,1,1],[2,2],
[4,1],[10],[2,1,1],[12],[6,1],[4,2],[3,1,1],[16],[2,2,1],[18],
[4,1,1],[6,2],[10,1],[22],[2,1,1,1],[4,4],[12,1],[2,2,2],[6,1,1],[28],
[4,2,1],[30],[3,1,1,1],[10,2],[16,1],[6,4],[2,2,1,1],[36],[18,1],[12,2],
[4,1,1,1],[40],[6,2,1],[42],[10,1,1],[4,2,2],[22,1],[46],[2,1,1,1,1],[6,6],
[4,4,1],[16,2],[12,1,1],[52],[2,2,2,1],[10,4],[6,1,1,1],[18,2],[28,1],[58],
[4,2,1,1],[60],[30,1],[6,2,2],[3,1,1,1,1],[12,4],[10,2,1],[66],[16,1,1],[22,2],
[6,4,1],[70],[2,2,1,1,1],[72],[36,1],[4,4,2],[18,1,1],[10,6],[12,2,1],[78],
[4,1,1,1,1],[2,2,2,2],[40,1],[82],[6,2,1,1],[16,4],[42,1],[28,2],[10,1,1,1],[88],
[4,2,2,1],[12,6],[22,1,1],[30,2],[46,1],[18,4],[3,2,1,1,1],[96],[6,6,1],[10,2,2],
[4,4,1,1],[100],[16,2,1],[102],[12,1,1,1],[6,4,2],[52,1],[106],[2,2,2,1,1],[108],
[10,4,1],[36,2],[6,1,1,1,1],[112],[18,2,1],[22,4],[28,1,1],[12,2,2],[58,1],[16,6],
[4,2,1,1,1],[10,10],[60,1],[40,2],[30,1,1],[4,4,4],[6,2,2,1],[126],[3,1,1,1,1,1],[42,2],
[12,4,1],[130],[10,2,1,1],[18,6],[66,1],[4,2,2,2],[16,1,1,1],[136],[22,2,1],[138],
[6,4,1,1],[46,2],[70,1],[12,10],[2,2,1,1,1,1],[28,4],[72,1],[6,6,2],[36,1,1],[148],
[4,4,2,1],[150],[18,1,1,1],[16,2,2],[10,6,1],[30,4],[12,2,1,1],[156],[78,1],[52,2],
[4,1,1,1,1,1],[22,6],[2,2,2,2,1],[162],[40,1,1],[10,4,2],[82,1],[166],[6,2,1,1,1],[12,12],
[16,4,1],[18,2,2],[42,1,1],[172],[28,2,1],[6,4,4],[10,1,1,1,1],[58,2],[88,1],[178],
[4,2,2,1,1],[180],[12,6,1],[60,2],[22,1,1,1],[36,4],[30,2,1],[16,10],[46,1,1],[6,2,2,2],
[18,4,1],[190],[3,2,1,1,1,1],[192],[96,1],[12,4,2],[6,6,1,1],[196],[10,2,2,1],[198],
[4,4,1,1,1],[66,2],[100,1],[28,6],[16,2,1,1],[40,4],[102,1],[22,2,2],[12,1,1,1,1],[18,10],
[6,4,2,1],[210],[52,1,1],[70,2],[106,1],[42,4],[2,2,2,1,1,1],[30,6],[108,1],[72,2],
[10,4,1,1],[16,12],[36,2,1],[222],[6,1,1,1,1,1],[4,4,2,2],[112,1],[226],[18,2,1,1],[228],
[22,4,1],[10,6,2],[28,1,1,1],[232],[12,2,2,1],[46,4],[58,1,1],[78,2],[16,6,1],[238],
[4,2,1,1,1,1],[240],[10,10,1],[2,2,2,2,2],[60,1,1],[6,6,4],[40,2,1],[18,12],[30,1,1,1],[82,2],
[4,4,4,1],[250],[6,2,2,1,1],[22,10],[126,1],[16,4,2],[3,1,1,1,1,1,1],[256],[42,2,1],[36,6],
[12,4,1,1],[28,2,2],[130,1],[262],[10,2,1,1,1],[52,4],[18,6,1],[88,2],[66,1,1],[268],
[4,2,2,2,1],[270],[16,1,1,1,1],[12,6,2],[136,1],[10,4,4],[22,2,1,1],[276],[138,1],[30,2,2],
[6,4,1,1,1],[280],[46,2,1],[282],[70,1,1],[18,4,2],[12,10,1],[40,6],[3,2,2,1,1,1],[16,16],
[28,4,1],[96,2],[72,1,1],[292],[6,6,2,1],[58,4],[36,1,1,1],[10,2,2,2],[148,1],[22,12],
[4,4,2,1,1],[42,6],[150,1],[100,2],[18,1,1,1,1],[60,4],[16,2,2,1],[306],[10,6,1,1],[102,2],
[30,4,1],[310],[12,2,1,1,1],[312],[156,1],[6,4,2,2],[78,1,1],[316],[52,2,1],[28,10],
[4,1,1,1,1,1,1],[106,2],[22,6,1],[18,16],[2,2,2,2,1,1],[12,4,4],[162,1],[108,2],[40,1,1,1],[46,6],
[10,4,2,1],[330],[82,1,1],[36,2,2],[166,1],[66,4],[6,2,1,1,1,1],[336],[12,12,1],[112,2],
[16,4,1,1],[30,10],[18,2,2,1],[6,6,6],[42,1,1,1],[22,4,2],[172,1],[346],[28,2,1,1],[348],
[6,4,4,1],[12,2,2,2],[10,1,1,1,1,1],[352],[58,2,1],[70,4],[88,1,1],[16,6,2],[178,1],[358],
[4,2,2,1,1,1],[18,18],[180,1],[10,10,2],[12,6,1,1],[72,4],[60,2,1],[366],[22,1,1,1,1],[40,2,2],
[36,4,1],[52,6],[30,2,1,1],[372],[16,10,1],[4,4,4,2],[46,1,1,1],[28,12],[6,2,2,2,1],[378],
[18,4,1,1],[126,2],[190,1],[382],[3,2,1,1,1,1,1],[10,6,4],[192,1],[42,2,2],[96,1,1],[388],
[12,4,2,1],[22,16],[6,6,1,1,1],[130,2],[196,1],[78,4],[10,2,2,1,1],[396],[198,1],[18,6,2],
[4,4,1,1,1,1],[400],[66,2,1],[30,12],[100,1,1],[4,2,2,2,2],[28,6,1],[36,10],[16,2,1,1,1],[408],
[40,4,1],[136,2],[102,1,1],[58,6],[22,2,2,1],[82,4],[12,1,1,1,1,1],[138,2],[18,10,1],[418],
[6,4,2,1,1],[420],[210,1],[46,2,2],[52,1,1,1],[16,4,4],[70,2,1],[60,6],[106,1,1],[12,10,2],
[42,4,1],[430],[2,2,2,1,1,1,1],[432],[30,6,1],[28,4,2],[108,1,1],[22,18],[72,2,1],[438],
[10,4,1,1,1],[6,6,2,2],[16,12,1],[442],[36,2,1,1],[88,4],[222,1],[148,2],[6,1,1,1,1,1,1],[448],
[4,4,2,2,1],[40,10],[112,1,1],[150,2],[226,1],[12,6,4],[18,2,1,1,1],[456],[228,1],[16,2,2,2],
[22,4,1,1],[460],[10,6,2,1],[462],[28,1,1,1,1],[30,4,2],[232,1],[466],[12,2,2,1,1],[66,6],
[46,4,1],[156,2],[58,1,1,1],[42,10],[78,2,1],[18,4,4],[16,6,1,1],[52,2,2],[238,1],[478],
[4,2,1,1,1,1,1],[36,12],[240,1],[22,6,2],[10,10,1,1],[96,4],[2,2,2,2,2,1],[486],[60,1,1,1],[162,2],
[6,6,4,1],[490],[40,2,1,1],[28,16],[18,12,1],[10,4,2,2],[30,1,1,1,1],[70,6],[82,2,1],[498],
[4,4,4,1,1],[166,2],[250,1],[502],[6,2,2,1,1,1],[100,4],[22,10,1],[12,12,2],[126,1,1],[508],
[16,4,2,1],[72,6],[3,3,1,1,1,1,1],[18,2,2,2],[256,1],[102,4],[42,2,1,1],[46,10],[36,6,1],[172,2],
[12,4,1,1,1],[520],[28,2,2,1],[522],[130,1,1],[6,4,4,2],[262,1],[30,16],[10,2,1,1,1,1],[22,22],
[52,4,1],[58,2,2],[18,6,1,1],[40,12],[88,2,1],[106,4],[66,1,1,1],[178,2],[268,1],[10,6,6],
[4,2,2,2,1,1],[540],[270,1],[180,2],[16,1,1,1,1,1],[108,4],[12,6,2,1],[546],[136,1,1],[60,2,2],
[10,4,4,1],[28,18],[22,2,1,1,1],[78,6],[276,1],[36,4,2],[138,1,1],[556],[30,2,2,1],[42,12],
[6,4,1,1,1,1],[16,10,2],[280,1],[562],[46,2,1,1],[112,4],[282,1],[6,2,2,2,2],[70,1,1,1],[568],
[18,4,2,1],[570],[12,10,1,1],[190,2],[40,6,1],[22,4,4],[3,2,2,1,1,1,1],[576],[16,16,1],[192,2],
[28,4,1,1],[82,6],[96,2,1],[52,10],[72,1,1,1],[12,4,2,2],[292,1],[586],[6,6,2,1,1],[30,18],
[58,4,1],[196,2],[36,1,1,1,1],[592],[10,2,2,2,1],[16,6,4],[148,1,1],[198,2],[22,12,1],[598],
[4,4,2,1,1,1],[600],[42,6,1],[66,2,2],[150,1,1],[10,10,4],[100,2,1],[606],[18,1,1,1,1,1],[28,6,2],
[60,4,1],[46,12],[16,2,2,1,1],[612],[306,1],[40,4,2],[10,6,1,1,1],[616],[102,2,1],[618],
[30,4,1,1],[22,2,2,2],[310,1],[88,6],[12,2,1,1,1,1],[4,4,4,4],[312,1],[18,10,2],[156,1,1],[36,16],
[6,4,2,2,1],[630],[78,1,1,1],[210,2],[316,1],[126,4],[52,2,1,1],[12,6,6],[28,10,1],[70,2,2],
[4,3,1,1,1,1,1],[640],[106,2,1],[642],[22,6,1,1],[42,4,2],[18,16,1],[646],[2,2,2,2,1,1,1],[58,10],
[12,4,4,1],[30,6,2],[162,1,1],[652],[108,2,1],[130,4],[40,1,1,1,1],[72,2,2],[46,6,1],[658],
[10,4,2,1,1],[660],[330,1],[16,12,2],[82,1,1,1],[18,6,4],[36,2,2,1],[28,22],[166,1,1],[222,2],
[66,4,1],[60,10],[6,2,1,1,1,1,1],[672],[336,1],[4,4,2,2,2],[12,12,1,1],[676],[112,2,1],[96,6],
[16,4,1,1,1],[226,2],[30,10,1],[682],[18,2,2,1,1],[136,4],[6,6,6,1],[228,2],[42,1,1,1,1],[52,12],
[22,4,2,1],[690],[172,1,1],[10,6,2,2],[346,1],[138,4],[28,2,1,1,1],[40,16],[348,1],[232,2],
[6,4,4,1,1],[700],[12,2,2,2,1],[36,18],[10,1,1,1,1,1,1],[46,4,2],[352,1],[100,6],[58,2,1,1],[708],
[70,4,1],[78,2,2],[88,1,1,1],[30,22],[16,6,2,1],[12,10,4],[178,1,1],[238,2],[358,1],[718],
[4,2,2,1,1,1,1],[102,6],[18,18,1],[240,2],[180,1,1],[28,4,4],[10,10,2,1],[726],[12,6,1,1,1],[2,2,2,2,2,2],
[72,4,1],[42,16],[60,2,1,1],[732],[366,1],[6,6,4,2],[22,1,1,1,1,1],[66,10],[40,2,2,1],[738],
[36,4,1,1],[18,12,2],[52,6,1],[742],[30,2,1,1,1],[148,4],[372,1],[82,2,2],[16,10,1,1],[106,6],
[4,4,4,2,1],[750],[46,1,1,1,1],[250,2],[28,12,1],[150,4],[6,2,2,2,1,1],[756],[378,1],[22,10,2],
[18,4,1,1,1],[760],[126,2,1],[108,6],[190,1,1],[16,4,2,2],[382,1],[58,12],[3,2,1,1,1,1,1,1],[768],
[10,6,4,1],[256,2],[192,1,1],[772],[42,2,2,1],[30,4,4],[96,1,1,1],[36,6,2],[388,1],[40,18],
[12,4,2,1,1],[70,10],[22,16,1],[28,2,2,2],[6,6,1,1,1,1],[156,4],[130,2,1],[786],[196,1,1],[262,2],
[78,4,1],[112,6],[10,2,2,1,1,1],[60,12],[396,1],[52,4,2],[198,1,1],[796],[18,6,2,1],[46,16],
[4,4,1,1,1,1,1],[88,2,2],[400,1],[72,10],[66,2,1,1],[22,6,4],[30,12,1],[268,2],[100,1,1,1],[808],
[4,2,2,2,2,1],[810],[28,6,1,1],[270,2],[36,10,1],[162,4],[16,2,1,1,1,1],[42,18],[408,1],[12,6,2,2],
[40,4,1,1],[820],[136,2,1],[822],[102,1,1,1],[10,4,4,2],[58,6,1],[826],[22,2,2,1,1],[828],
[82,4,1],[276,2],[12,1,1,1,1,1,1],[16,6,6],[138,2,1],[166,4],[18,10,1,1],[30,2,2,2],[418,1],[838],
[6,4,2,1,1,1],[28,28],[420,1],[280,2],[210,1,1],[12,12,4],[46,2,2,1],[10,10,6],[52,1,1,1,1],[282,2],
[16,4,4,1],[36,22],[70,2,1,1],[852],[60,6,1],[18,4,2,2],[106,1,1,1],[856],[12,10,2,1],[858],
[42,4,1,1],[40,6,2],[430,1],[862],[5,2,2,1,1,1,1],[172,4],[432,1],[16,16,2],[30,6,1,1],[78,10],
[28,4,2,1],[66,12],[108,1,1,1],[96,2,2],[22,18,1],[6,4,4,4],[72,2,1,1],[876],[438,1],[292,2],
[10,4,1,1,1,1],[880],[6,6,2,2,1],[882],[16,12,1,1],[58,4,2],[442,1],[886],[36,2,1,1,1],[126,6],
[88,4,1],[10,2,2,2,2],[222,1,1],[46,18],[148,2,1],[178,4],[6,3,1,1,1,1,1],[22,12,2],[448,1],[30,28],
[4,4,2,2,1,1],[52,16],[40,10,1],[42,6,2],[112,1,1,1],[180,4],[150,2,1],[906],[226,1,1],[100,2,2],
[12,6,4,1],[910],[18,2,1,1,1,1],[82,10],[456,1],[60,4,2],[228,1,1],[130,6],[16,2,2,2,1],[918],
[22,4,1,1,1],[306,2],[460,1],[70,12],[10,6,2,1,1],[36,4,4],[462,1],[102,2,2],[28,1,1,1,1,1],[928],
[30,4,2,1],[18,6,6],[232,1,1],[310,2],[466,1],[16,10,4],[12,2,2,1,1,1],[936],[66,6,1],[312,2],
[46,4,1,1],[940],[156,2,1],[40,22],[58,1,1,1,1],[6,4,2,2,2],[42,10,1],[946],[78,2,1,1],[72,12],
[18,4,4,1],[316,2],[16,6,1,1,1],[952],[52,2,2,1],[190,4],[238,1,1],[28,10,2],[478,1],[136,6],
[4,2,1,1,1,1,1,1],[30,30],[36,12,1],[106,2,2],[240,1,1],[192,4],[22,6,2,1],[966],[10,10,1,1,1],[18,16,2],
[96,4,1],[970],[2,2,2,2,2,1,1],[138,6],[486,1],[12,4,4,2],[60,1,1,1,1],[976],[162,2,1],[88,10],
[6,6,4,1,1],[108,2,2],[490,1],[982],[40,2,1,1,1],[196,4],[28,16,1],[46,6,2],[18,12,1,1],[42,22],
[10,4,2,2,1],[990],[30,1,1,1,1,1],[330,2],[70,6,1],[198,4],[82,2,1,1],[996],[498,1],[36,2,2,2],

[4,4,4,1,1,1],[12,10,6],[166,2,1],[58,16],[250,1,1],[66,4,2],[502,1],[52,18],[6,2,2,1,1,1,1],[1008],
[100,4,1],[336,2],[22,10,1,1],[1012],[12,12,2,1],[28,6,4],[126,1,1,1],[112,2,2],[508,1],[1018],
[16,4,2,1,1],[1020],[72,6,1],[30,10,2],[3,3,1,1,1,1,1,1],[40,4,4],[18,2,2,2,1],[78,12],[256,1,1],[6,6,6,2],
[102,4,1],[1030],[42,2,1,1,1],[1032],[46,10,1],[22,4,2,2],[36,6,1,1],[60,16],[172,2,1],[1038],
[12,4,1,1,1,1],[346,2],[520,1],[148,6],[28,2,2,1,1],[18,10,4],[522,1],[348,2],[130,1,1,1],[1048],
[6,4,4,2,1],[1050],[262,1,1],[12,2,2,2,2],[30,16,1],[210,4],[10,2,1,1,1,1,1],[150,6],[22,22,1],[352,2],
[52,4,1,1],[1060],[58,2,2,1],[1062],[18,6,1,1,1],[70,4,2],[40,12,1],[96,10],[88,2,1,1],[1068],
[106,4,1],[16,6,2,2],[66,1,1,1,1],[36,28],[178,2,1],[42,4,4],[268,1,1],[358,2],[10,6,6,1],[82,12],
[4,2,2,2,1,1,1],[46,22],[540,1],[18,18,2],[270,1,1],[30,6,4],[180,2,1],[1086],[16,1,1,1,1,1,1],[10,10,2,2],
[108,4,1],[1090],[12,6,2,1,1],[1092],[546,1],[72,4,2],[136,1,1,1],[1096],[60,2,2,1],[156,6],
[10,4,4,1,1],[366,2],[28,18,1],[1102],[22,2,1,1,1,1],[16,12,4],[78,6,1],[40,2,2,2],[276,1,1],[1108],
[36,4,2,1],[100,10],[138,1,1,1],[52,6,2],[556,1],[222,4],[30,2,2,1,1],[1116],[42,12,1],[372,2],
[6,4,1,1,1,1,1],[58,18],[16,10,2,1],[1122],[280,1,1],[4,4,4,2,2],[562,1],[22,6,6],[46,2,1,1,1],[1128],
[112,4,1],[28,12,2],[282,1,1],[102,10],[6,2,2,2,2,1],[226,4],[70,1,1,1,1],[378,2],[568,1],[66,16],
[18,4,2,1,1],[162,6],[570,1],[126,2,2],[12,10,1,1,1],[228,4],[190,2,1],[36,30],[40,6,1,1],[382,2],
[22,4,4,1],[1150],[3,2,2,1,1,1,1,1],[1152],[576,1],[10,6,4,2],[16,16,1,1],[88,12],[192,2,1],[60,18],
[28,4,1,1,1],[42,2,2,2],[82,6,1],[1162],[96,2,1,1],[232,4],[52,10,1],[388,2],[72,1,1,1,1],[166,6],
[12,4,2,2,1],[1170],[292,1,1],[22,16,2],[586,1],[46,4,4],[6,6,2,1,1,1],[106,10],[30,18,1],[130,2,2],
[58,4,1,1],[1180],[196,2,1],[12,12,6],[36,1,1,1,1,1],[78,4,2],[592,1],[1186],[10,2,2,2,1,1],[40,28],
[16,6,4,1],[396,2],[148,1,1,1],[1192],[198,2,1],[238,4],[22,12,1,1],[18,6,2,2],[598,1],[108,10],
[4,4,2,1,1,1,1],[1200],[600,1],[400,2],[42,6,1,1],[240,4],[66,2,2,1],[70,16],[150,1,1,1],[30,12,2],
[10,10,4,1],[172,6],[100,2,1,1],[1212],[606,1],[4,2,2,2,2,2],[18,1,1,1,1,1,1],[1216],[28,6,2,1],[52,22],
[60,4,1,1],[36,10,2],[46,12,1],[1222],[16,2,2,1,1,1],[6,6,4,4],[612,1],[408,2],[306,1,1],[1228],
[40,4,2,1],[1230],[10,6,1,1,1,1],[136,2,2],[616,1],[18,12,4],[102,2,1,1],[1236],[618,1],[58,6,2],
[30,4,1,1,1],[72,16],[22,2,2,2,1],[112,10],[310,1,1],[82,4,2],[88,6,1],[42,28],[12,2,1,1,1,1,1],[1248],
[4,4,4,4,1],[138,2,2],[312,1,1],[178,6],[18,10,2,1],[250,4],[156,1,1,1],[418,2],[36,16,1],[1258],
[6,4,2,2,1,1],[96,12],[630,1],[420,2],[78,1,1,1,1],[22,10,4],[210,2,1],[180,6],[316,1,1],[46,2,2,2],
[126,4,1],[40,30],[52,2,1,1,1],[66,18],[12,6,6,1],[16,4,4,2],[28,10,1,1],[1276],[70,2,2,1],[1278],
[4,3,1,1,1,1,1,1],[60,6,2],[640,1],[1282],[106,2,1,1],[256,4],[642,1],[12,10,2,2],[22,6,1,1,1],[1288],
[42,4,2,1],[1290],[18,16,1,1],[430,2],[646,1],[36,6,4],[5,2,2,2,1,1,1],[1296],[58,10,1],[432,2],
[12,4,4,1,1],[1300],[30,6,2,1],[1302],[162,1,1,1],[28,4,2,2],[652,1],[1306],[108,2,1,1],[16,10,6],
[130,4,1],[22,18,2],[40,1,1,1,1,1],[100,12],[72,2,2,1],[262,4],[46,6,1,1],[438,2],[658,1],[1318],
[10,4,2,1,1,1],[1320],[660,1],[6,6,2,2,2],[330,1,1],[52,4,4],[16,12,2,1],[1326],[82,1,1,1,1],[442,2],
[18,6,4,1],[10,10,10],[36,2,2,1,1],[42,30],[28,22,1],[88,4,2],[166,1,1,1],[190,6],[222,2,1],[102,12],
[66,4,1,1],[148,2,2],[60,10,1],[78,16],[6,2,1,1,1,1,1,1],[268,4],[672,1],[448,2],[336,1,1],[70,18],
[4,4,2,2,2,1],[192,6],[12,12,1,1,1],[40,10,2],[676,1],[270,4],[112,2,1,1],[58,22],[96,6,1],[150,2,2],
[16,4,1,1,1,1],[1360],[226,2,1],[46,28],[30,10,1,1],[12,6,4,2],[682,1],[1366],[18,2,2,1,1,1],[36,36],
[136,4,1],[456,2],[6,6,6,1,1],[1372],[228,2,1],[10,4,4,4],[42,1,1,1,1,1],[16,2,2,2,2],[52,12,1],[196,6],
[22,4,2,1,1],[1380],[690,1],[460,2],[172,1,1,1],[276,4],[10,6,2,2,1],[72,18],[346,1,1],[462,2],
[138,4,1],[106,12],[28,2,1,1,1,1],[198,6],[40,16,1],[30,4,2,2],[348,1,1],[126,10],[232,2,1],[1398],
[6,4,4,1,1,1],[466,2],[700,1],[60,22],[12,2,2,2,1,1],[280,4],[36,18,1],[66,6,2],[10,3,1,1,1,1,1],[1408],
[46,4,2,1],[82,16],[352,1,1],[156,2,2],[100,6,1],[282,4],[58,2,1,1,1],[108,12],[708,1],[42,10,2],
[70,4,1,1],[28,6,6],[78,2,2,1],[1422],[88,1,1,1,1],[18,4,4,2],[30,22,1],[1426],[16,6,2,1,1],[1428],
[12,10,4,1],[52,2,2,2],[178,1,1,1],[1432],[238,2,1],[40,6,4],[358,1,1],[478,2],[718,1],[1438],
[4,2,2,1,1,1,1,1],[130,10],[102,6,1],[36,12,2],[18,18,1,1],[16,16,4],[240,2,1],[1446],[180,1,1,1],[22,6,2,2],
[28,4,4,1],[1450],[10,10,2,1,1],[1452],[726,1],[96,4,2],[12,6,1,1,1,1],[46,30],[2,2,2,2,2,2,1],[1458],
[72,4,1,1],[486,2],[42,16,1],[18,10,6],[60,2,1,1,1],[292,4],[732,1],[162,2,2],[366,1,1],[112,12],
[6,6,4,2,1],[1470],[22,1,1,1,1,1,1],[490,2],[66,10,1],[58,4,4],[40,2,2,1,1],[210,6],[738,1],[28,16,2],
[36,4,1,1,1],[1480],[18,12,2,1],[1482],[52,6,1,1],[10,4,2,2,2],[742,1],[1486],[30,2,1,1,1,1],[1488],
[148,4,1],[70,6,2],[372,1,1],[1492],[82,2,2,1],[22,12,4],[16,10,1,1,1],[498,2],[106,6,1],[1498]

);

/* This is sequence A038547 in Sloane's index EXTENDED by me, 23 Jan 2003 */
function RPStoNb(RPS){
  var nn,n=1,s="",p,ok=true;
  for(var i=0;i<RPS.length;i++)
   {p=Math.pow(a3x[i+1],RPS[i]);
    nn=n;n=n*p;ok=ok && isFinite(n) && (n.toString().charAt(n.toString().length-1)!="0")
       && (n.toString().indexOf(".")==-1);
    s=s+(s==""?"":" x ")+a3x[i+1]+(RPS[i]>1?"^"+RPS[i]:"")
   };
  return (ok?n+" = "+s:s)
};
function smallestRS()
{  var rsC=validateInput(document.runsumForm.rsCount.value,"décompte des sommes de suites");
   if(isNaN(rsC))return;
   if(rsC<1){alert("Tout nombre a au moins 1 somme de suite");return};
   var ans="Le plus petit nombre avec "+rsC+" comme somme de suite est ";
   if(rsC==1){ans=ans+"1";report(ans);return}
   if(rsC>=leastRS.length){report(ans+"pas disponible - désolé!");return};
   var xn=RPStoNb(leastRS[rsC]);
   ans=ans+xn;
   report(ans);
 };  
function issq(s){ return Math.pow(intSqrt(s),2)==s }
function intSqrt(s){ return Math.round(Math.sqrt(s)) }
function findnupto()
{  var rstart=0,rend=0,discrim,
       given=document.runsumForm.startend[document.runsumForm.startend.selectedIndex].value;
   var nupto=validateInput(document.runsumForm.nupto.value,"débuts/fins"); 
   if(isNaN(nupto))return;
   if(nupto<1){alert("Suites commençant par un nombre supérieur à 0. Votre "
              +(given=="s"?"initiale":"finale")+" valeur.");return};
   if(given=="s"){rstart=nupto}else{rend=nupto};
   var sum=validateInput(document.runsumForm.nuptoSUM.value,"sum");
   if(isNaN(sum))return;
   if(sum<1){alert("Totaux de somme de suites toujours de 1 ou plus.");return};
   if(given=="s")
	   {discrim=1+4*rstart*(rstart-1)+8*sum; 
	   if(discrim>0 && issq(discrim) && (intSqrt(discrim)%2==1))
		   {rend =(intSqrt(discrim)-1)/2
		    report("La somme de la suite partant de "+rstart+" à "+rend+" est "+sum)}
	   else report("Pas de nombre final pour une suite commençant par "+
	               rstart+" avec une somme de "+sum)}
   else{discrim=1+4*rend*(rend+1)-8*sum; 
        if(discrim>0 && issq(discrim) && (intSqrt(discrim)%2==1))
             {rstart =(intSqrt(discrim)+1)/2
              report("La somme de la suite partant de "+rstart+" à "+rend+" est "+sum)}
         else report("Pas de nombre initial pour une suite finissant par "+rend
                     +" avec une somme de "+sum.value)}
};
function isEmpty(field){ return field==null || field=="" || field==" " };
function isFilled(field){return ! isEmpty(field)}
function frmto(what){
 var lo=validateInput(document.runsumForm.istart.value,'commence');
 if(isNaN(lo))return;  
 var  hi=isEmpty(document.runsumForm.iend.value)?lo:validateInput(document.runsumForm.iend.value,'"vers max"');
 if(isNaN(hi))return;
 if(lo>hi){alert("Votre valeur finale inférieure à la valeur initiale!");return};
 for(var i=lo;i<=hi;i++)findrunsums(i,what)
};
function pfactorize(){
  var f=document.runsumForm.forFactzn;
  if(isEmpty(f.value)){alert('nombre premier pour factorisation manquant!');return};
  f=evalit(f.value);
  if(isNaN(f)){alert('nombre premier pour factorisation erroné!');return};
  report(f+' = '+f6x(f5x(f)))
};
function msgFrNb(r,NBR){
  var a=r[r.length-1];
  var sumL=sumbetween(a[0],a[1]),sumR=( NBR ? sumbetween(a[1]+1,a[2]) : sumbetween(a[1],a[2]) );
  if(sumL==sumR)return( a[0]+".."+a[1]+"="+((NBR?1:0)+a[1])+".."+a[2] + "="+sumL )
  else alert("Erreur!  "+a+" non valide!")
};
function friends(Nbr){     /* find SUM(a..b) = SUM(b..c) */
    var bb=validateInput(document.runsumForm.b.value,'b-initial'),results=new Array();
    if(isNaN(bb))return;
    if(bb<2)bb=2;
    var blast=isEmpty(document.runsumForm.bend.value)?bb:validateInput(document.runsumForm.bend.value,'b-final');
    if(isNaN(bb))return;
    if(blast<bb){var x=bb;bb=blast;blast=x};
    for(var b=bb;b<=blast;b++)
	{var a=b-1,c=(Nbr?b+2:b+1),sumL=a+b,sumR=(Nbr?b+1:b)+c,res="b="+b+": ";
		results.length=0;
		while(true)  
		{ if(sumL==sumR)
			{results[results.length]=[a,b,c];
			 res=res+msgFrNb(results,Nbr)+"; "
			};
		  if(a==1 && sumR>=sumL)break;
		  if(sumL<sumR){a=a-1;sumL=sumL+a}
		  else{c=c+1;sumR=sumR+c}
		};
		
		report(res)
     }
};
function TRI(n){var t=(n%2==0?n/2*(n+1):(n+1)/2*n); return (isNaN(t)?" trop grand":t) };
function tri(){
  var f=validateInput(document.runsumForm.TriOf.value,"index du nombre triangulaire");
  if(isNaN(f))return;
  var m=isEmpty(document.runsumForm.TriTo.value)?f:
         validateInput(document.runsumForm.TriTo.value,"index final du nombre triangulaire");
  if(isNaN(m))return;
  if(m<f){alert("Nombres triangulaires: index final ("+m+") plus petit que index initial ("+f+").");return};
  for(var n=f;n<=m;n++)
      {report("T("+n+")="+TRI(n))
      };
};
function TriNear(){
  var n=validateInput(document.runsumForm.TriN.value,"'proche'");
  if(isNaN(n) || n<1)return;
  var ind=Math.sqrt(2*n);
  if(isNaN(ind)){alert("Nombre est trop grand");return};
  ind=(ind<3?1:Math.round(ind-2));
  report("Nombres triangulaires proches de "+n);
  for(var i=ind;i<ind+4;i++)
     if(i>0)report("T("+i+")="+TRI(i))
};
function fxdnb(){
   var seq=new Array(),
       n=validateInput(document.runsumForm.FxdNbR.value,"nombre de sommes de suite");
   if(isNaN(n))return;
   var f=validateInput(document.runsumForm.FxdFrom.value,"limite inférieure");
   if(isNaN(f))return;
   var t=validateInput(document.runsumForm.FxdTo.value,"limite supérieure");
   if(isNaN(t))return;
   var cond=document.runsumForm.FxdNbRel[document.runsumForm.FxdNbRel.selectedIndex].value;
   for(var i=f;i<=t;i++)
       {var c=f12x(i);
        if(eval(c+cond+n))
             {if(cond=="==")
                   {seq[seq.length]=i}
               else{report(i+" a "+c+" sommes de suite"+(c>1?"s":""))}}
       };
    if(cond=="==")
       report("Nombres dans gamme "+f+" à "+t
              +" avec "+n+" sommes de suite: "+(seq.length==0?"rien":seq))
};


