zoukankan      html  css  js  c++  java
  • 求一个整数的最大质因数(回答一个群友的问题)

     

           群里最近每天都聊得很嗨,虽然不一定是技术,更多的是生活,还是非常开心。因为工作、程序只是我们生命中的一小部分,人的幸福与否,更多的由人的业余生活和他的精神世界所决定。和一群陌生的人,扯扯淡,毫无压力的聊聊人生觉得也挺好。

           好的,直接奔入主题。情况是这样的,群里有位同学问了一道算法,求一个整数的最大质因数。然后他给出了代码(如下所示),但是测试没有通过。

     1 int largest_prime_factor(int n)
     2 {
     3     while (n >1)
     4     {
     5         for(int i=2;i<=n;i++)
     6         {
     7             if(n%i==0) 
     8             {    
     9                 n = n/i;
    10                 break;
    11             }
    12             return n;
    13         }
    14     }
    15 }

           第一反应是觉得这个算法肯定是会有些问题的,比如说当n=9时,直接就返回9了。

           仔细思考了一下,发现,这真是一个巧妙的解题思路,只不过没有控制好边界条件罢了。改正后:

     1 int largest_prime_factor(int n){
     2     if (n<1){//
     3         return -1;
     4     }
     5     if (n==1){//判断边界条件
     6         return 1;
     7     }
     8     while (n >1){
     9         for(int i=2;i<=n;i++){
    10             if (n==i){//到达n了,就没有继续的必要了,已经最大
    11                 return n;
    12             }
    13             if(n%i==0){//    
    14                 n = n/i;
    15                 break;
    16             }
    17         }
    18     }
    19 }

           自己测试过,没有问题。

           其实,当我第一次看到这道题的时候,我的思路是两个for循环。但是好像没有上面的效率高。代码如下:

          

    bool isZhiSu(int n){//是否是质数,是质数返回true
        for(int i=2;i<n;i++){
            if (n%i==0){
                return false;
            }
        }
        return true;
    }
    int largest_prime_factor2(int n){
        if (n<1){
            return -1;
        }
        for (int i=n;i>=1;i--){
            if (n%i==0&&isZhiSu(i)){//判断是否能被N整除,并且是质素
                return i;
            }
        }
    }

     一道质数求解的题目,其实也有很多技巧。哇嘎嘎。。。

        版权所有,欢迎转载,但是转载请注明出处:潇一

     

  • 相关阅读:
    [代码质量] Git统计本次提交新增代码行数,建议每个评审commit新增行数小于400行
    [Web 安全] WASC 和 OWASP两个web安全方面组织机构介绍
    [web 前端] Npm package.json与package-lock.json文件的作用
    Mac IDEA 插件 lombok
    IDEA 导入新的项目步骤
    IDEA for Mac 快捷键
    Flink --- hello world
    LogisticRegression回归算法 Sklearn 参数详解
    keep going
    在 macOS 上快速新建 txt 文本文件
  • 原文地址:https://www.cnblogs.com/xiaoyi115/p/3760893.html
Copyright © 2011-2022 走看看