首页 > 解决方案 > 我对这个程序中使用的逻辑感到困惑,需要深入解释

问题描述

public class Prime
{    
 public static void main(String args[]){    
  int i,m=0,flag=0;      
  int n=3;//it is the number to be checked    
  m=n/2;      
  if(n==0||n==1){  
   System.out.print(n+" is not prime number");      
  }
else
{  
   for(i=2;i<=m;i++)//Why are we using m here?
{      
    if(n%i==0){      
     System.out.print(n+" is not prime number");      
     flag=1;      
     break;      
    }      
   }      
   if(flag==0)  { System.out.print(n+" is prime number"); }  
  }//end of else  
}    
}   

我很难理解,我们为什么要使用这种逻辑?[for(i=2;i<=m;i++)] 'm' 在这里的作用是什么?

标签: java

解决方案


您需要注意这一行:

m = n / 2

mfor循环中用于限制完成的迭代次数。前面的语句意味着循环将从 2 变为 n. 值的一半。这样做是为了“优化”该算法的执行时间,因为超过一半的数字的除数并不意味着覆盖。

这不是该算法的最佳优化。更好的方法是将for循环限制到 n 的平方根:

m = (int)Math.sqrt(n);

推荐阅读