求100以内的质数
/*求100以内的质数*/ class ZhiShuExer { public static void main(String[] args) { boolean flag = true; for (int i=2; i<=100; i++) { for(int j=2;j<i;j++) { if(i%j == 0){//判断当前数与2-i之间的数取模,若存在余数为0,则该数不是质数 flag = false; } } if (flag){ System.out.println(i); } flag = true; } } }
此时算法的时间复杂度为O(n^2)
算法优化1
class ZhiShuExer { public static void main(String[] args) { boolean flag = true; for (int i=2; i<=100; i++) { for(int j=2;j<i;j++) { if(i%j == 0){//判断当前数与2-i之间的数取模,若存在余数为0,则该数不是质数 flag = false; break;//当判断为非质数时,可减少循环次数 } } if (flag){ System.out.println(i); } flag = true; } } }
增加break后,可减少非质数的循环次数,但算法复杂度仍为O(n^2)
算法优化2
class ZhiShuExer
{
public static void main(String[] args)
{
boolean flag = true;
for (int i=2; i<=100; i++)
{
for(int j=2;j<=Math.sqrt(i);j++)//内层循环只需判断到根号i即可
{
if(i%j == 0){//判断当前数与2-i之间的数取模,若存在余数为0,则该数不是质数
flag = false;
break;//
}
}
if (flag){
System.out.println(i);
}
flag = true;
}
}
}
此时算法的时间复杂度为O()