El segundo for, está dentro del primero.
Te recomiendo que uses sangrías y llaves para visualizar el código mejor.
Código C++:
Ver originalint primos(int c){
int a,j,pr;
pr=1;
for(a=2 ; a<=c ; a++){
for(j=2 ; j<=a/2 ; j++){
if((a%j)==0)
pr=0;
}
if(pr){
p("%d\n",a);
}
pr=1;
}
}
La función sigue estos pasos
Empieza con pr=1 indicando que de momento el número es primo
Para cada número del 2 hasta el número deseado (c) [primer for]:
Para cada número del 2 hasta c/2 [segundo for]:
Si el número es factor pr=0, es decir, no es primo
Si es primo lo imprime
El c/2, es porque, un número no pude ser factor de un número que sea mayor de la mitas de este.
Si miras por ejemplo 10:
factores: 1, 2, 5
ningún número de 5 (10/2) va a poder ser factor de 10
Siento la mala explicación, pero espero que entiendas la lógica más o menos.