鱼C论坛

 找回密码
 立即注册
查看: 4153|回复: 37

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

[复制链接]
发表于 2017-5-10 06:19:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


                               
登录/注册后可看大图


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

不许看答案,否则打屁屁





程序分析:
Snip20170509_43.png

图太丑了,见谅

输入 90, 打印出 90=2*3*3*5 。
       


源代码:
游客,如果您要查看本帖隐藏内容请回复






如果喜欢,请订阅
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-13 23:45:23 | 显示全部楼层
6666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-18 10:31:38 | 显示全部楼层
很好多多学习大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-23 23:12:43 | 显示全部楼层
啥是质因数

点评

这是小学数学,你连这都不知道,真厉害阿。  发表于 2023-1-13 14:38
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-19 22:02:39 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-14 18:46:24 | 显示全部楼层
sfscasfsedfs
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-14 20:43:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-30 17:40:57 | 显示全部楼层
两眼一抹黑呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-2 18:30:43 | 显示全部楼层
six six six
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-27 00:52:01 | 显示全部楼层
  1. window.onload = function(){
  2.                                 var arr = [];
  3.                                 var x = parseInt(prompt("请输入一个整数"));
  4.                                 var i = 1;
  5.                                 var arr = [];
  6.                                 do{       
  7.                                         i++;
  8.                                         if(x%i == 0){
  9.                                                 arr.push(i);
  10.                                                 x = x/i;
  11.                                                 i = 1;

  12.                                                
  13.                                         }
  14.                                 }while(x != i);
  15.                                 alert(arr);
  16.                         };
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-1 15:50:56 | 显示全部楼层
..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-5-22 21:16:27 | 显示全部楼层
看看题主思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 20:19:39 | 显示全部楼层
放弃大数和部分数字的计算了,使人劳累。

  1. <!DOCTYPE html>
  2. <html>

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

  8. <body ng-app="app">
  9.     <br />
  10.     <center ng-controller="cal">
  11.         <label>请输入一个整数
  12.             <input type="text" ng-model="num" />
  13.         </label>
  14.         <p>分解质因数为: {{ theNum() }}</p>
  15.     </center>
  16. </body>
  17. <script type="text/javascript">
  18.     var app = angular.module('app', []);
  19.     app.controller('cal', function ($scope) {
  20.         $scope.theNum = function () {
  21.             var max = 2048;
  22.             //max数值越大,适用数字的范围越大,越大的数字,网页加载的速度越慢,可能导致浏览器崩溃,2048还是正常的数字,多加个零就考验浏览器了。基本加载不出来,试了好多次了。
  23.             // 所以没办法判断更大的数字
  24.             var count = 0;
  25.             var arr = [];
  26.             var str = '';
  27.             var num = Number($scope.num);
  28.             if (num == 1) {
  29.                 str = '1';
  30.             } else {
  31.                 for (j = 0; j < max; j++) {
  32.                     for (i = 2; i < max; i++) {
  33.                         if (num % i != 0) {
  34.                             continue;
  35.                         } else {
  36.                             var tmp = num / i;
  37.                             arr[count] = i;
  38.                             count++;
  39.                             if (tmp == num) {
  40.                                 break;
  41.                             }
  42.                             num = tmp;
  43.                             break;
  44.                         }
  45.                     }
  46.                 }
  47.                 for (k = 0; k < count; k++) {
  48.                     str += arr[k];
  49.                     if (k != (count - 1)) {
  50.                         str += '*';
  51.                     }
  52.                 }
  53.             }
  54.             return $scope.num + '=' + str;
  55.         }
  56.     });
  57. </script>

  58. </html>
复制代码


github找了个算法,确实很大。
https://github.com/hustcc/PrimeTable/tree/master/javascript
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 21:35:17 | 显示全部楼层
本帖最后由 木Muk 于 2018-8-12 21:46 编辑

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

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

  8. <body ng-app="app">
  9.     <br />
  10.     <center ng-controller="cal">
  11.         <label>请输入一个整数
  12.             <input type="text" ng-model="num" />
  13.         </label>
  14.         <p>分解质因数为: {{ theNum() }}</p>
  15.     </center>
  16. </body>
  17. <script type="text/javascript">
  18.     var app = angular.module('app', []);
  19.     app.controller('cal', function ($scope) {
  20.         $scope.theNum = function () {
  21.             var count = 0;
  22.             var arr = [];
  23.             var str = '';
  24.             var num = Number($scope.num);
  25.             for (var i = 2; i <= Math.sqrt(Number($scope.num)); i++) {
  26.                 if (num==i) {
  27.                     break;
  28.                 }
  29.                 while (num%i == 0) {
  30.                     num /= i;
  31.                     arr[count++] = i;
  32.                 }
  33.             }
  34.             if (num != 1) arr[count++] = num;
  35.             for (k=0; k<count; k++) {
  36.                 str += arr[k];
  37.                 if (k!=(count-1)) {
  38.                     str += '*';
  39.                 }
  40.             }

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

  45. </html>
复制代码



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

  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>鱼C-分解质因数</title>
  6. </head>

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


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

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

  35.     </script>
  36. </body>

  37. </html>
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-20 23:05:48 | 显示全部楼层
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.         <title>5</title>
  5.         <meta charset="utf-8">
  6.         <script type="text/javascript">
  7.                 function getsome(){
  8.                         var test=parseInt(document.getElementById("test").value);
  9.                         var isp=document.getElementById("isp");
  10.                         var mytest=new Array()
  11.                         var num=test+"=";
  12.                         someone(test);
  13.                         for(var i=0;i<mytest.length;i++){
  14.                                 num+=mytest[i]+"*";}
  15.                         isp.innerHTML=num.slice(0,-1);
  16.                         function someone(test){
  17.                                 for(var i=2;i<=test;i++){
  18.                                         if((test%i)==0){
  19.                                                 mytest.push(i);
  20.                                                 if((test/i)==1){
  21.                                                         return 1;}
  22.                                                 else{
  23.                                                         someone(test/i)
  24.                                                         break;}
  25.                                         }
  26.                                 }
  27.                         }
  28.                 }

  29.         </script>
  30. </head>
  31. <body>
  32.         <input type="text" name="" id="test"><input type="button" value="输出"  name="" onclick="getsome()">
  33.         <p id="isp"></p>
  34. </body>
  35. </html>       
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-23 12:03:53 | 显示全部楼层
emm
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-24 20:52:28 | 显示全部楼层
支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-8 15:02:01 | 显示全部楼层
nb
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-11 21:31:23 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-24 10:39:31 | 显示全部楼层
看思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 20:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表