111 lines
4 KiB
Text
111 lines
4 KiB
Text
#proto buscarprimos(_X_,_Y_)
|
|
|
|
#include <basico.h>
|
|
|
|
algoritmo
|
|
|
|
pila de trabajo 50
|
|
decimales '0'
|
|
|
|
números( dif 1, dif 2, dif 22, dif 24, dif 42, dif 642)
|
|
cadenas( inicio1, inicio2, inicio22, inicio24, inicio42, inicio642,\
|
|
final1, final2, final22, final24, final42, final642 )
|
|
|
|
sw1=1, sw2=1, sw22=1, sw24=1, sw42=1, sw642=1
|
|
|
|
i=2
|
|
iterar
|
|
i, es primo?, entonces {
|
|
i2 = i, i4=i, i6=i
|
|
|
|
++i2; i2, es primo?, entonces{
|
|
++dif 1
|
|
sw1, entonces{
|
|
#( string(i)),#(string(i2)), unir en 'inicio1'
|
|
sw1=0
|
|
}
|
|
#( string(i)),#(string(i2)), unir en 'final1'
|
|
}
|
|
++i2; i2, es primo?, entonces{
|
|
++dif 2
|
|
sw2, entonces{
|
|
#( string(i)),#(string(i2)), unir en 'inicio2'
|
|
sw2=0
|
|
}
|
|
#( string(i)),#(string(i2)), unir en 'final2'
|
|
|
|
i2+=2; i2, es primo?, entonces{
|
|
++dif 22
|
|
sw22, entonces{
|
|
#( string(i)),#(string(i2-2)),#(string(i2))
|
|
unir en 'inicio22'
|
|
sw22=0
|
|
}
|
|
#( string(i)),#(string(i2-2)),#(string(i2))
|
|
unir en 'final22'
|
|
}
|
|
i2+=2; i2, es primo?, entonces{
|
|
++dif 24
|
|
sw24, entonces{
|
|
#( string(i)),#(string(i2-4)),#(string(i2))
|
|
unir en 'inicio24'
|
|
sw24=0
|
|
}
|
|
#( string(i)),#(string(i2-4)),#(string(i2))
|
|
unir en 'final24'
|
|
}
|
|
}
|
|
i4+=4, i4, es primo?, entonces{
|
|
i4+=2, i4, es primo?, entonces{
|
|
++dif 42
|
|
sw42, entonces{
|
|
#( string(i)),#(string(i4-2)),#(string(i4))
|
|
unir en 'inicio42'
|
|
sw42=0
|
|
}
|
|
#( string(i)),#(string(i4-2)),#(string(i4))
|
|
unir en 'final42'
|
|
}
|
|
}
|
|
/* aquí, debido al espaciamiento, pueden haber primos entre 'i'
|
|
e 'i+12', y debo chequear eso */
|
|
i6+=6, i6, es primo?, entonces{
|
|
i6+=4, i6, es primo?, entonces{
|
|
i6+=2, i6, es primo?, entonces{
|
|
si '#(buscar primos( (i+1),(i6-6) ) && buscar primos( (i6-5),i6-2))'
|
|
sw642, entonces{
|
|
#( string(i)),#(string(i6-6)),#(string(i6-2)),#(string(i6))
|
|
unir en 'inicio642'
|
|
sw642=0
|
|
}
|
|
++dif 642
|
|
fin si
|
|
|
|
#( string(i)),#(string(i6-6)),#(string(i6-2)),#(string(i6))
|
|
unir en 'final642'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
++i
|
|
hasta que '#(i == 1000000)'
|
|
imprimir( "Diff Sequence\tCount\t\tFirst\tLast\n")
|
|
imprimir( "[ 1 ] \t", dif 1, "\t", #(lpad(" ",13,inicio1))," ",final1,\
|
|
"\n[ 2 ] \t", dif 2, "\t", #(lpad(" ",13,inicio2))," ",final2,\
|
|
"\n[ 2-2 ] \t", dif22, "\t", #(lpad(" ",13,inicio22))," ",final22,\
|
|
"\n[ 2-4 ] \t", dif 24,"\t", #(lpad(" ",13,inicio24))," ",final24,\
|
|
"\n[ 4-2 ] \t", dif 42,"\t", #(lpad(" ",13,inicio42))," ",final42,\
|
|
"\n[ 6-4-2 ]\t", dif 642,"\t", #(lpad(" ",13,inicio642))," ",final642,"\n")
|
|
|
|
terminar
|
|
|
|
subrutinas
|
|
|
|
buscar primos(x,y)
|
|
sw=1
|
|
iterar para( i=x, #(sw && i<y), ++i )
|
|
i, es primo?, entonces{
|
|
sw=0
|
|
}
|
|
siguiente
|
|
retornar 'sw'
|