百度经典面试题——判定素数(如何优化?)

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 百度经典面试题——判定素数(如何优化?),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

目录

方案一(未优化)

方案二(初阶优化)

方案三(进阶优化)


方案一(未优化)

大多数可能想到的是以下这种方法

public class Main(){
 
   public static void main11(String[] args){
        Scanner scanner = new Scanner(System.in);
        int input = scanner.nextInt();
        int i = 0;
        for(i = 2; i < input; i++){
            if(input % i == 0){
                break;
            }
        }
        if(i == input){
            System.out.println(input + "是素数!");
        }
        else{
            System.out.println(input + "不是素数!");
        }
    }
}

分析:

        要除2 ~ (n – 1)个数字,效率太低,面试官肯定不满意(doge)


方案二(初阶优化)

有一点经验的可能会想到这里

    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int input = scanner.nextInt();
        int i = 0;
        for(i = 2; i <= input/2; i++){
            if(input % i == 0){
                break;
            }
        }
        if(i > input/2){
            System.out.println(input + "是素数!");
        }
        else{
            System.out.println(input + "不是素数!");
        }
    }

分析:

        例如16这个数,可以写成1*16、2*8、4*4,仔细观察每组数中都至少有一个数小于或等于n/2,所以只需要去除2 ~ n/2之间的数即可,减少了将近一半的计算量,这时,面试官可能还会说:小伙子不错,还能再优化一下吗?


方案三(进阶优化)

有些经验的人可能就会想到了

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int input = scanner.nextInt();
        int i = 0;
        for (i = 2; i <= Math.sqrt(input); i++) {
            if (input % i == 0) {
                break;
            }
        }
        if (i > Math.sqrt(input)) {
            System.out.println(input + "是素数!");
        } else {
            System.out.println(input + "不是素数!");
        }
    }

分析:

        例如16可以写成1*16、2*8、4*4,仔细观察,每组数据中至少有一个数是小于或等于根号16,所以计算量又可以减小到2~根号16,面试官可能会说:好~小伙子,进我们公司吧!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/129909.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!