java 新手 关于素数的简单问题。请指教

如题,下面是程序。但我不知道为什么在for语句的时候,必须使用**divisor<=d/2**,,为什么要**d/2**,而divisor<=d为什么就无法执行限入死循、、这里break是不是跳出整个while循环,还是调回到for.求解。
import java.util.Scanner;
public class Test{
public static void main(String args[]){
Scanner input = new Scanner(System.in);
/*a为素数的个数,
b为每行打印的个数
c为变量计算素数的个数。
d为数字。
e为布尔值*/
final int a =50;
final int b =10;
int c = 0;
int d = 2;
while(c<a){
boolean e =true ;
for(int divisor =2;divisor<=d/2;divisor++){
if(d%divisor==0){
e = false;
break;}
}
if (e){
c++;
if(c%b==0)
System.out.println(d);
else
System.out.print(d+" ");
}
d++;
}
}
}

如果用d 永远进不去 if(e) e永远会成为false

<=d 的时候 数除以数的本身 余肯定是0 随便什么数都会经过 e=false
c 的值永远不会加 肯定死循环啊

break 跳出for循环。若用divisor<=d,则当divisor==d时满足d%divisor==0,从而每个数都误判为非素数。也就导致c永远为0,
所以无法跳出while循环。