不二如是 发表于 2017-5-10 06:19:54

算法5 ◉‿◉ 随机输入一个整数,将其分解质因数

本帖最后由 不二如是 于 2017-5-9 23:33 编辑

http://xxx.fishc.com/forum/201705/05/225545py2j222x5z6x55n2.png

按照提示,完成代码,秀秀你的编程能力!

不许看答案,否则打屁屁



程序分析:

图太丑了,见谅{:10_297:}
输入 90, 打印出 90=2*3*3*5 。
       

源代码:
**** Hidden Message *****



○面试题索引贴●
如果喜欢,请订阅{:10_303:} :
HTML5 - 庖丁解牛 + JavaScript - 庖丁解牛

leowang88 发表于 2017-8-13 23:45:23

6666

qvbmnm520 发表于 2017-10-18 10:31:38

很好多多学习大神

远去的我 发表于 2017-10-23 23:12:43

{:5_94:} 啥是质因数

chy阳光 发表于 2017-12-19 22:02:39

厉害

zhanglu 发表于 2018-3-14 18:46:24

sfscasfsedfs

昔日少年郎 发表于 2018-3-14 20:43:27

夜无眠 发表于 2018-3-30 17:40:57

两眼一抹黑呀

神人 发表于 2018-4-2 18:30:43

six six six

dsa159245 发表于 2018-4-27 00:52:01

window.onload = function(){
                                var arr = [];
                                var x = parseInt(prompt("请输入一个整数"));
                                var i = 1;
                                var arr = [];
                                do{       
                                        i++;
                                        if(x%i == 0){
                                                arr.push(i);
                                                x = x/i;
                                                i = 1;

                                               
                                        }
                                }while(x != i);
                                alert(arr);
                        };

向一朵朵鲜花 发表于 2018-5-1 15:50:56

..

shishao723 发表于 2018-5-22 21:16:27

看看题主思路

木Muk 发表于 2018-8-12 20:19:39

{:10_261:}放弃大数和部分数字的计算了,使人劳累。

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>分解质因数</title>
    <script src="https://cdn.bootcss.com/angular.js/1.4.6/angular.min.js"></script>
</head>

<body ng-app="app">
    <br />
    <center ng-controller="cal">
      <label>请输入一个整数
            <input type="text" ng-model="num" />
      </label>
      <p>分解质因数为: {{ theNum() }}</p>
    </center>
</body>
<script type="text/javascript">
    var app = angular.module('app', []);
    app.controller('cal', function ($scope) {
      $scope.theNum = function () {
            var max = 2048;
            //max数值越大,适用数字的范围越大,越大的数字,网页加载的速度越慢,可能导致浏览器崩溃,2048还是正常的数字,多加个零就考验浏览器了。基本加载不出来,试了好多次了。
            // 所以没办法判断更大的数字
            var count = 0;
            var arr = [];
            var str = '';
            var num = Number($scope.num);
            if (num == 1) {
                str = '1';
            } else {
                for (j = 0; j < max; j++) {
                  for (i = 2; i < max; i++) {
                        if (num % i != 0) {
                            continue;
                        } else {
                            var tmp = num / i;
                            arr = i;
                            count++;
                            if (tmp == num) {
                              break;
                            }
                            num = tmp;
                            break;
                        }
                  }
                }
                for (k = 0; k < count; k++) {
                  str += arr;
                  if (k != (count - 1)) {
                        str += '*';
                  }
                }
            }
            return $scope.num + '=' + str;
      }
    });
</script>

</html>

github找了个算法,确实很大。
https://github.com/hustcc/PrimeTable/tree/master/javascript

木Muk 发表于 2018-8-12 21:35:17

本帖最后由 木Muk 于 2018-8-12 21:46 编辑

看了不二的算法,感觉自己的数学白学了{:10_266:}
借着大佬算法,重写一下自己的程序(不过同前面程序一样,由于边输入计算,能计算出来,就是考计算机性能,浏览器咋处理的问题)
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>分解质因数</title>
    <script src="https://cdn.bootcss.com/angular.js/1.4.6/angular.min.js"></script>
</head>

<body ng-app="app">
    <br />
    <center ng-controller="cal">
      <label>请输入一个整数
            <input type="text" ng-model="num" />
      </label>
      <p>分解质因数为: {{ theNum() }}</p>
    </center>
</body>
<script type="text/javascript">
    var app = angular.module('app', []);
    app.controller('cal', function ($scope) {
      $scope.theNum = function () {
            var count = 0;
            var arr = [];
            var str = '';
            var num = Number($scope.num);
            for (var i = 2; i <= Math.sqrt(Number($scope.num)); i++) {
                if (num==i) {
                  break;
                }
                while (num%i == 0) {
                  num /= i;
                  arr = i;
                }
            }
            if (num != 1) arr = num;
            for (k=0; k<count; k++) {
                str += arr;
                if (k!=(count-1)) {
                  str += '*';
                }
            }

            return $scope.num + '=' + str;
      }
    });
</script>

</html>


还是大佬的输入完再计算比较好
顺手解决"*"问题手动 @不二如是
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>鱼C-分解质因数</title>
</head>

<body>
    <script>
      //用户输入整数
      var input = parseInt(prompt("请输入一个整数:"));


      //外层循环遍历质因数
      for (var n = 2; n <= Math.sqrt(input); n++) {
            if (input == n) {
                //结束分解
                break;
            }
            //通过while循环完成判读
            // 被整数的新input与老n是否还存在整除关系
            //不满足跳出while循环,n+1
            while (input % n == 0) {
                input /= n;
                // 当数字可以进入循环的且两数字相等,则input等于1;
                if(input != 1) {
                  document.write(n + '*');
                } else {
                  document.write(n);
                }
            }

      }
      //1不是质数
      //4 = 2 * 2 *
      // 最后的"*"已经解决
      if (input != 1)
            document.write(input);

    </script>
</body>

</html>

{:10_256:} {:10_256:}

waitforlove 发表于 2018-9-20 23:05:48

<!DOCTYPE html>
<html>
<head>
        <title>5</title>
        <meta charset="utf-8">
        <script type="text/javascript">
                function getsome(){
                        var test=parseInt(document.getElementById("test").value);
                        var isp=document.getElementById("isp");
                        var mytest=new Array()
                        var num=test+"=";
                        someone(test);
                        for(var i=0;i<mytest.length;i++){
                                num+=mytest+"*";}
                        isp.innerHTML=num.slice(0,-1);
                        function someone(test){
                                for(var i=2;i<=test;i++){
                                        if((test%i)==0){
                                                mytest.push(i);
                                                if((test/i)==1){
                                                        return 1;}
                                                else{
                                                        someone(test/i)
                                                        break;}
                                        }
                                }
                        }
                }

        </script>
</head>
<body>
        <input type="text" name="" id="test"><input type="button" value="输出"name="" onclick="getsome()">
        <p id="isp"></p>
</body>
</html>       

a211827754 发表于 2018-9-23 12:03:53

emm

江南尘缘 发表于 2018-9-24 20:52:28

支持

凌乱大帅比 发表于 2018-10-8 15:02:01

nb

爱喝百岁山 发表于 2018-10-11 21:31:23

1

simble 发表于 2018-10-24 10:39:31

看思路
页: [1] 2
查看完整版本: 算法5 ◉‿◉ 随机输入一个整数,将其分解质因数