求不大于num的最大质数

public int maxPrime(int num){
int i=num;
while(i>1){
int m=2,n=i-1;
while (m<=n) {
if (m*n==i) {
break;
}
else if (m*n>i) {
n--;
}
else {
m++;
}
}
if (m>n) {
return i;
}
i--;
}
return 1;
}
循环内的代码是什么意思?

首先,判断num是否为质数:
m=2,最小,n=num-1 ,如果 m*n >num ,则n--;否则m*n<=numm m++
循环,得出的结果是num是质数 这时m>n,或者num不是质数m<=n
如果num是质数,返回num,否则num--,继续判断num是否为质数

循环是用来判断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,这显然是错误的。所以算法是不对的。

每行代码什么意思,1楼已经回复的很细了。
质数,又称素数,指在一个大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为只有1和本身两个因数的数)。
最小的素数是2,也是素数中唯一的偶数;其他素数都是奇数。
public int maxPrime(int num){

if (num==1)
{
System.out.print("输入num 是1,num应大于1");
}

else{

for(int i = num; i >=2; i--){

        int count = 0;

        for(int j = 2 ; j<=i; j++){

            if(i%j==0){
                count++;
            }
            if(j==i & count == 1){
                System.out.print(i+" ");
            }
            if(count > 1){
                break;
            }

    }

}

}
}

望采纳