算法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 - 庖丁解牛
6666 很好多多学习大神 {:5_94:} 啥是质因数 厉害 sfscasfsedfs 看 两眼一抹黑呀 six six six
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);
}; .. 看看题主思路 {: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: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:} <!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> emm
支持 nb 1 看思路
页:
[1]
2