soy sincero no revisé mucho el codigo... usa etiquetas GeSHi para publicarlo (arriba de los emoticones a la derecha) para que sea legible...
solo vi esta instrucción
while ( m %2 == 0 ){
a[N]=m;
}
eso tiene 2 opciones... si m inicialmente es impar no hace nada, si m es par, es un ciclo infinito porque m nunca cambia... no se cual es tu fin, pero m debe cambiar para que eso funcione