答:
循环是用来判断i是否为质数的。
拿i==num来举例:
如果num不为质数的话,必然分解成两个数相乘的形式,而这两个数必然是都小于num的。
所以从小于num的两数相乘来判断num是否为质数。
循环中是分别从小数m==2和大数n==num-1相成来判断的。
m*nnum的话就将n-1,m*n=num的话就判断num不为质数。m>n的话就判断num为质数,也就是找不出两数相乘为num。
那么有一个疑问就是这样的做法是否会有漏洞,因为看起来并不是通过将所有比num小的数两两相乘的所有情况都判断了。那么就来验证一下
令num==10;
运行程序
1:i==10;m==2,n==9;m<=n;m*n>i,所以n--;之后m*n>i,直到n==5.循环跳出 i--
2:i==9;m==2,n==5;m<=n;m*n>i,所以n--,n==4;m*ni,所以n--,n==3.m*n==i,循环跳出i--
3:i==8;m==3,n==3,m*n>i,所以n--,n==2,n
4:m>n,返回i的值,i为8.
结果显示不大于10的最大质数为8,这显然是错误的。所以算法是不对的。