判断一个数是否是素数——Java(进阶高效算法)

 本文续写上一篇文章:判断一个数是否是素数——Java(初阶低效算法)

上一篇中的for循环是从3直到n-1,这里通过 Math.sqrt(n) 的方法做出改进,使得循环的次数变少以加快运算效率和速率


一、 Math.sqrt(n) 

实际上就是开方

如果一个数 n 不是质数,那么它一定可以分解成两个因数 a 和 b,其中 a * b = n。如果两个因数都大于 sqrt(n),那么它们的乘积将大于 n,这与 a * b = n 矛盾。因此,至少有一个因数小于或等于 sqrt(n)。

所以只需要到sqrt(n)就足以判断在3到n-1之间有没有它的其他因数了,根本没有必要到n-1


 

二、改动部分

for 循环的终止条件,使其只检查到 sqrt(n)

原代码:

for (int i = 2; i < n; i++)

改进代码:

for (int i = 2; i <= Math.sqrt(n); i++)

 


总结 

完整代码:

import java.util.Scanner;

public class _2
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数n: ");
        int n = sc.nextInt();


        //特殊情况部分
        if (n <= 1)
        {
            System.out.println(n + "不是质数");
        }
        else if (n == 2)
        {
            System.out.println(n + "是质数");
        }


        //一般情况部分
        else
        {
            boolean isPrime = true;//判断n是否为质数
            for (int i = 2; i <= Math.sqrt(n); i++)
            {
                if (n % i == 0)
                {
                    isPrime = false;
                    break;
                }
            }


            //输出部分
            if (isPrime)
            {
                System.out.println(n + "是质数");
            }
            else
            {
                System.out.println(n + "不是质数");
            }
        }
    }
}

输出效果:

显然同上一篇文章相同:判断一个数是否是素数——Java(初阶低效算法)

你可能感兴趣的:(Java错题集,算法,java)