// suma de los once primos truncables #include #include

Anuncio
// suma de los once primos truncables
#include <stdio.h>
#include <math.h>
long
long
long
long
long
long
long
priTru(long);
priTruIzq(long);
priTruDer(long);
primo(long);
quiDigIzq(long);
potencia(long, long);
numDig(long);
int main()
{
// suma los once primos truncables, como 3997
long s = 0, n = 10, t = 0;
while (t < 11)
{
if (priTru(n))
{
t++;
s += n;
}
n++;
}
printf("%ld", s);
return 0;
}
long priTru(long n)
{
// si n es primo truncable
long p = 0;
if (priTruIzq(n) && priTruDer(n))
p = 1;
return p;
}
long priTruIzq(long n)
{
// si primo truncable izquierda
long p = primo(n);
while (p && n)
{
n = quiDigIzq(n);
if (n)
p = primo(n);
}
return p;
}
long priTruDer(long n)
{
// si primo truncable izquierda
long p = primo(n);
while (p && n)
{
n /= 10;
if (n)
p = primo(n);
}
return p;
}
long primo(long n)
{
// si n es primo
long p = 1, d = 2; // primo, divisor
if (n < 2)
p = 0;
else
while (p && d <= sqrt(n))
if (!(n%d++))
p = 0;
return p;
}
long quiDigIzq(long n)
{
// quita digito de la izquierda a n
n = n%(potencia(10, numDig(n)-1));
return n;
}
long potencia(long b, long e)
{
// b a la e
long p = 1; // potencia
while (e--)
p *= b;
return p;
}
long numDig(long n)
{
// numero de digitos de n
long d = 1;
while (n > 9)
{
n /= 10;
d++;
}
return d;
}
// ecabrera, sdqdr, marzo 2015
Descargar