Skip to content

Instantly share code, notes, and snippets.

@jakedobkin
Created December 6, 2011 03:29
Show Gist options
  • Select an option

  • Save jakedobkin/1436576 to your computer and use it in GitHub Desktop.

Select an option

Save jakedobkin/1436576 to your computer and use it in GitHub Desktop.
Euler 37
#!/usr/local/bin/node
// first, prep prime seive up to 1MM
n=1000000;
myPrimes = new Array();
for (i=2;i<=n;i++)
{
myPrimes[i]=true;
}
for (i=2;i<=n;i++)
{
if (myPrimes[i])
{
for (j=2*i;j<=n;j+=i)
{
myPrimes[j]=false;
}
}
}
// then check if each prime is truncatable
// if it is, add it to the appropriate de-duping array (circularsieve1 or 2)
circularsieve = [];
circularsieve2 = [];
for (i=11;i<=1000000;i+=2)
{
if (myPrimes[i])
{
truncater = i.toString();
// from left
for (j=1;j<=truncater.length-1;j++)
{
test = truncater.slice(j);
if (truncater.indexOf("0")>=0)
{
break;
}
if(myPrimes[Number(test)]!=true)
{
break;
}
if(myPrimes[Number(test)]==true && (j==truncater.length-1))
{
circularsieve[Number(truncater)] = true;
}
}
// from right
for (k=0;k<=truncater.length;k++)
{
test2 = truncater.slice(0,truncater.length-k);
if (truncater.indexOf("0")>=0)
{
break;
}
if(myPrimes[Number(test2)]!=true)
{
break;
}
if(myPrimes[Number(test2)]==true && (k==truncater.length-1))
{
circularsieve2[Number(truncater)] = true;
}
}
}
}
sum = 0;
for (l=0;l<=1000000;l++)
{
if (circularsieve[l] && circularsieve2[l])
{
console.log(l,"from both");
sum += l;
}
}
console.log("total sum is", sum);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment