outF="runsumsF";function ndigs(n){return n.toString().length};function Fw(n,fw){  if(ndigs(n)==fw)return n  else return "                                                                   ".              substring(0,fw-ndigs(n))+n.toString()};var MAXN=50000;var fC=new Array(),maxPi;var seive=new Array(); var RSchar=".."; //".."var report=putmsg; //window.status="Finding primes, please wait..."; for(var i=0;seive[i]=2*i+1,seive[i]<=MAXN;i++){}; maxPi=0;fC[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)fC[++maxPi]=seive[si];   //alert([fC[0],fC[1],fC[2]]); //window.status="Found "+maxPi+" primes less than "+MAXN;function primePowersOf(n){    var maxPtotry=Math.ceil(Math.sqrt(n)), N=n, p,e,      pripows=new Array(),fi= -1;  for(var i=0;fC[i]<=maxPtotry && fC[i]<=N;i++)     {       if(N % fC[i]==0)        {p=fC[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("Number is too big - sorry!");HALT()}  //alert("primePowersOf<-"+pripows);  return pripows}function fB4(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+=" (prime)";   return s};function FA(Zb){    if(Zb.length==0)return 1  else return Math.pow(Zb[0][0],Zb[0][1])*FA(Zb.slice(1))};function F9(Zb,f){   function f9apply(Zb,Pre,f)    {if(Zb.length==0)f(Pre)    else {f9apply(Zb.slice(1),Pre,f)           for(var i=1;i<=Zb[0][1];i++)                  f9apply(Zb.slice(1),Pre.concat([[Zb[0][0],i]]),f)          }    }  f9apply(Zb,[],f) };function array2ToString(Zb){   if(Zb.length==0)return "[]"  else{var zstr="";       for(var i=0;i<Zb.length;i++)          {if(zstr.length>0)zstr=zstr+",";           zstr=zstr+"["+Zb[i]+"]"       }   }  return zstr};function oppParity(a,b) {return (a%2==1 && b%2==0 || a%2==0 && b%2==1)} function F8(N){    function g(zb){       var f1=FA(zb);       var f2=N/f1;       if(f1<=f2  && oppParity(f1,f2))          F2( (f2-(f1-1))/2, (f2+f1-1)/2 )    };    F9(primePowersOf(N),g) };function F7(n){  var f=primePowersOf(n);  //alert("f7: "+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 F2(a,b){  RS[RS.length]=[a,b]}function F1(AB){ return AB[1]-AB[0]+1 };function RF3(AB){  return (AB[0]==AB[1]         ? AB[0]        : AB[0]+RSchar+AB[1]) };function F4(){  var s="";  for(var i=0;i<RS.length;i++)       s=s+RF3(RS[i]) +(i+1<RS.length?"=":"")   return s};function F5(lo,hi){  //OK if lo==hi   return (hi+lo)*(hi-lo+1)/2  };function F6(N){  for(var i=0;i<RS.length;i++)  {if( F5( RS[i][0], RS[i][1]) != N)      alert("RS error!  SUM "+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('Please enter a number for the '+Which+" value.");return Number.NaN} ;  var i=parseInt(x);  if(isNaN(i)){alert("The "+Which+" value is not a proper number.\rPlease re-enter it.");      return Number.NaN}  if(x.match(/[^0-9, \t\n\r\f\v]/) != null)        {alert("Your "+Which+" value is not a whole number (digits only).\rPlease re-enter it.");        return Number.NaN}   else if(x.match(/,/)!= null) {return eval("["+x+"]")}  else return i};function checkrange(i,Which,Min,Max){   if(! isNaN(Min) && i<Min){alert("The "+Which+" number is too small(minimum is "+Min+")");    return false}  else if(!isNaN(Max) && i>Max){alert("The "+Which+" number is too large(maximum is "+Max+")");    return false }  else return true};function findsum(){ var lo=validateInput(document.runsumsF.n.value,"'from'");  if(isNaN(lo))return;  var  hi=validateInput((document.runsumsF.upto.value),"'up to'");  if(isNaN(hi))return;  if(lo>hi){var x=lo;lo=hi;hi=x};   report("The sum of all numbers from "+lo+" to "+hi+" is "+ F5(lo,hi));};          function findrunsums(n,what,kind){var c=F7(n),len,ind;runsumsOf(n); var ans=Fw(n,5)+ " has "+c+" runsum"+ (c==1?"":"s"); switch(kind){ case 'all':  len=RS.length; if(what!="count")ans=ans +": "+ F4(RS);              break; case 'shortest':      len=Infinity; // ignore singleton unless only one     for(var i=0;i<RS.length;i++)          if(F1(RS[i])!=1 && F1(RS[i])<len){len=F1(RS[i]);ind=i};     if(!isFinite(len)){len=1;ind=0};     ans=ans+": shortest is "+RF3(RS[ind])+" ("+len+")";      break; case 'longest':len=-Infinity;     for(var i=0;i<RS.length;i++)            if(F1(RS[i])>len) {len=F1(RS[i]);ind=i};     ans=ans+": longest is "+RF3(RS[ind])+" ("+len+")";      break; }; report(ans) ; return len;                         }function RSorder(R1,R2){ return R1[0]-R2[0] }  function runsumsOf(N){  RS.length=0; F8(2*N); RS=RS.sort(RSorder); F6(N);}function shortestRunsumLen(N){  with(Math){if(pow(2,round(log(N)/log(2)))==N)return 1};  for(var m=2,T=1;(N-T)%m!=0;T=T+ (m++));  return m};function factorThem()  /* SHOW the PRIME FACTORS of nbs in range lo..hi */{ with(document.runsumsF)  {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+" = "+fB4(primePowersOf(i)) +"\r"} }           }   };                                        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(fC[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==""?"":" ")+fC[i+1]+(RPS[i]>1?"<sup>"+RPS[i]+"</sup>":"")   };  return (ok?n+" = "+s:s)};        function smallestRS(){  var rsC=validateInput(document.runsumsF.rsCount.value,"runsums count");   if(isNaN(rsC))return;   if(rsC<1){alert("Every number has at least 1 runsum");return};   var ans="The smallest number with "+rsC+" runsums is ";   if(rsC==1){ans=ans+"1";report(ans);return}   if(rsC>=leastRS.length){report(ans+"not available - sorry!");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.runsumsF.startend[document.runsumsF.startend.selectedIndex].value;     var nupto=validateInput(document.runsumsF.nupto.value,"starts/ends");    if(isNaN(nupto))return;   if(nupto<1){alert("Runs start with a number greater than 0. Renter your "              +(given=="s"?"starting":"ending")+" value.");return};       if(given=="s"){rstart=nupto}else{rend=nupto};      var sum=validateInput(document.runsumsF.nuptoSUM.value,"sum");   if(isNaN(sum))return;   if(sum<1){alert("Runsum totals are always 1 or more.");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("The sum of the run from "+rstart+" to "+rend+" is "+sum)}	   else report("There is no end number for a run starting at "+	               rstart+" with a sum of "+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("The sum of the run from "+rstart+" to "+rend+" is "+sum)}         else report("There is no starting number for a run ending at "+rend                     +" with a sum of "+sum.value)}};function findfromto(){ var rstart,rend,rs=new Array(),s;      ct=validateInput(document.runsumsF.fromto.value,"number of runs"),      given=document.runsumsF.startend[document.runsumsF.startend.selectedIndex].value,      nupto=validateInput(document.runsumsF.nupto.value,"starts/ends");    if(isNaN(nupto)||isNaN(ct))return;   if(nupto<1){alert("Runs start with a number greater than 0: please renter your "              +(given=="s"?"starting":"ending")+" value");return};   if(ct>50){alert("Too many runs: max is 50");return};   if(given=="s"){rstart=nupto;s="Runs starting with "+rstart+" have sums: ";      for(var i=0;i<ct;i++)rs.push(F5(rstart,rstart+i));      report(s+rs)   }else{rend=nupto;s="Runs ending with "+rend+" have sums: ";      for(var i=0;i<ct&&rend>i;i++)rs.push(F5(rend-i,rend));      report(s+rs.reverse());}};     function isEmpty(field){ return field==null || field=="" || field==" " };function isFilled(field){return ! isEmpty(field)}function frmto(what){ var lo=validateInput(document.runsumsF.istart.value,'start'),ANS=new Array(),      kind=(what=="count"?"all"            :document.runsumsF.showwhat[document.runsumsF.showwhat.selectedIndex].value) if(!isNaN(lo))   {var  hi=isEmpty(document.runsumsF.iend.value)         ?lo         :validateInput(document.runsumsF.iend.value,'"up to"');    if(isNaN(hi))return;    if(lo>hi){alert("Your end value is less than the start value!");return};    for(var i=lo;i<=hi;i++)  ANS[ANS.length]=findrunsums(i,what,kind)   }// else if(typeof lo == "object") //   {//    for(var i=0;i<lo.length;i++)ANS[ANS.length]=findrunsums(lo[i],what)//   }; if(ANS.length>1&&ANS[0]>0)report(ANS); report('')}; function pfactorize(){  var f=document.runsumsF.forFactzn;  if(isEmpty(f.value)){alert('The prime factorization number is missing!');return};  f=evalit(f.value);  if(isNaN(f)){alert('The prime factorization number is wrong!');return};  report(f+' = '+fB4(primePowersOf(f)))};function msgFrNb(r,NBR){  var a=r[r.length-1];  var sumL=F5(a[0],a[1]),sumR=( NBR ? F5(a[1]+1,a[2]) : F5(a[1],a[2]) );  if(sumL==sumR)return( a[0]+".."+a[1]+"="+((NBR?1:0)+a[1])+".."+a[2] + "="+sumL )  else alert("Error!  "+a+" is not valid!")};   function friends(Nbr){     /* find SUM(a..b) = SUM(b..c) */    var bb=validateInput(document.runsumsF.b.value,'starting-b'),results=new Array(),      foundsome=false;    if(isNaN(bb))return;    if(bb<2)bb=2;    var blast=isEmpty(document.runsumsF.bend.value)?bb:validateInput(document.runsumsF.bend.value,'ending-b');    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];foundsome=true;			 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}		};				if(results.length>0)report((Nbr?"Neighbours":"Friends")+" with "+res)     };     if(!foundsome)report((Nbr?"Neighbours":"Friends")+" with b="+bb+".."+blast+": None found");};function friendsfrom(NbrQ){     /* find SUM(a..b) = SUM(b..c) */    var a0=validateInput(document.runsumsF.a.value,'starting-a');    if(isNaN(a0))return;    var alast=isEmpty(document.runsumsF.aend.value)?a0:validateInput(document.runsumsF.aend.value,'ending-a');    if(isNaN(alast))return;    if(alast<a0){alert("!! Your starting value for a exceeds its up-to value");return};    var sum0=validateInput(document.runsumsF.fnsumfrom.value,'starting-sum');    if(isNaN(sum0))return;    var sumlast=isEmpty(document.runsumsF.fnsumto.value)?sum0:validateInput(document.runsumsF.fnsumto.value,'ending-sum');    if(isNaN(sumlast))return;    if(sumlast<sum0){alert("!! Your starting value for sum exceeds its up-to value");return};        //report("a0="+a0+" aend="+alast+" s0="+sum0+" send="+sumlast);    report((NbrQ?"Neighbours":"Friends")+" with a="+a0+(alast>a0?".."+alast:"")+           " and sum "+sum0+(sum0<sumlast?".."+sumlast:"")+           ": ");    var a=a0,CT=0;    while(a<=alast)    {  var Llen=2,Lsum=a+a+1;       while( Lsum<sum0 )Lsum+=a+(Llen++);       while(Lsum<=sumlast)       { //report("Llen="+Llen+" from "+a);        var b=a+Llen-1;        var Rlen=2; var R0=(NbrQ?b+1:b);var Rsum=R0+(R0+1);        while(Rsum<Lsum)Rsum+=R0+(Rlen++);        if(Lsum==Rsum)report((++CT)+": "+Lsum+"="+a+".."+b+"="+R0+".."+(R0+Rlen-1));        Lsum+=a+(Llen++)       };       a++     };     report((CT==0?"None":CT)+" found");report("");};//a0=3 aend=100 s0=12 send="" will not find NBRS 3..function TRI(n){var t=(n%2==0?n/2*(n+1):(n+1)/2*n); return (isNaN(t)?" too large":t) };function tri(){  var f=validateInput(document.runsumsF.TriOf.value,"Triangular number's index");  if(isNaN(f))return;  var m=isEmpty(document.runsumsF.TriTo.value)?f:         validateInput(document.runsumsF.TriTo.value,"Triangular number's end index");  if(isNaN(m))return;  if(m<f){alert("Triangle numbers: the final index ("+m+") is less than the starting index ("+f+").");return};  for(var n=f;n<=m;n++)      {report("T("+n+")="+TRI(n))      };};function TriNear(){var s;  var n=validateInput(document.runsumsF.TriN.value,"'near'");  if(isNaN(n) || n<1)return;  if((2*n+1)==2*n){alert("Number is too large");return};  var i=Math.floor((2*Math.sqrt(2*n)-1)/2);  s="Triangle numbers near "+n+" :";  if(TRI(i)<=n&&TRI(i+1)!=n)s=s+" T("+i+")="+TRI(i);  if(TRI(i)!=n)s=s+"  T("+(i+1)+")="+TRI(i+1);  report(s);};function fxdnb(){   var seq=new Array(),       n=validateInput(document.runsumsF.FxdNbR.value,"number of runsums");   if(isNaN(n))return;   var f=validateInput(document.runsumsF.FxdFrom.value,"lower limit");   if(isNaN(f))return;   var t=validateInput(document.runsumsF.FxdTo.value,"upper limit");   if(isNaN(t))return;   var cond=document.runsumsF.FxdNbRel[document.runsumsF.FxdNbRel.selectedIndex].value;   for(var i=f;i<=t;i++)       {var c=F7(i);        if(eval(c+cond+n))             {if(cond=="==")                   {seq[seq.length]=i}               else{report(i+" has "+c+" runsum"+(c>1?"s":""))}}       };    if(cond=="==")       report("Numbers in the range "+f+" to "+t              +" with "+n+" runsums: "+(seq.length==0?"none":seq))};function findrlen(w){// r= show runs, s= show sums only  var nbL=validateInput(document.runsumsF.nbL.value,"number of runsums"), sums=new Array();   if(isNaN(nbL))return;   if(nbL<1)HALT(" Number of runsums must be at least 1!");   var L=validateInput(document.runsumsF.Len.value,"runsum length");   if(isNaN(L))return;   if(L<1)HALT(" The run length must be at least 1!");      if(w=='r'){report("Runs of length "+L);              for(var i=1;i<=nbL;i++)report(i+".."+(i+L-1)+"="+F5(i,i+L-1))}   else   if(w=='s'){for(var i=1;i<=nbL;i++)sums[sums.length]=F5(i,i+L-1);              report('Sums with runs of length '+L+": "+sums.join(','))}  };
