[算法问题2]

魔术世界中文版 2013-11-26 06:34:30
任意给定一个正整数,将其分解成质数相乘形式
15=3*5
24=2*2*2*3
17=1*17
等号左边为函数参数,右边为返回值
JS,JQ均可,给出思路得分少量,给出程序得分大量。
...全文
172 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
scscms太阳光 2013-11-26
  • 打赏
  • 举报
回复
function resolve(n){
    var l = n,arr=[];
    while(l>1){
        for(var i= 2;i<=l;i++){
            if(l % i ==0){
                arr.push(i);
                l /= i;
                break;
            }
        }
    }
    return n+"="+(arr.length==1?"1*":"")+arr.join("*");
}
给的数必须大于1.
天际的海浪 2013-11-26
  • 打赏
  • 举报
回复

function gtno(n)
{
	var za = [2];
	gtr: for(var i=3; i<=n/2; i+=2)
	{
		for(var r=2; r<i/2; r++)
			if(i%r==0)
				continue gtr;
		za.push(i);
	}
	var arr = [];
	function def(s)
	{
		var i=0,sb;
		while((sb=za[i++]) && s%sb!=0);
		if(sb)
		{
			arr.push(sb);
			def(s/sb);
		}
	}
	def(n);
	return arr.length==0?"1*"+n:arr.join("*");
}
alert(gtno(15));
alert(gtno(24));
alert(gtno(17));
alert(gtno(442));

zhjdg 2013-11-26
  • 打赏
  • 举报
回复
更正
function numSplit(num,result){
	var splitUnit = [2,3,5,7];
	var $a;
	if(typeof result == 'undefined'){
		result = []
	}
	if(($a = parseInt(num/splitUnit[0])) && ($a*splitUnit[0] == num)){
		result.push(splitUnit[0]);
		return numSplit($a,result);
	}
	if(($a = parseInt(num/splitUnit[1])) && ($a*splitUnit[1] == num)){
		result.push(splitUnit[1]);
		return numSplit($a,result);
	}
	if(($a = parseInt(num/splitUnit[2])) && ($a*splitUnit[2] == num)){
		result.push(splitUnit[2]);
		return numSplit($a,result);
	}
	if(($a = parseInt(num/splitUnit[3])) && ($a*splitUnit[3] == num)){
		result.push(splitUnit[3]);
		return numSplit($a,result);
	}
	
	if(result.length == 0){
		return '1 * ' +num;
	}else{
		return result.join('*');
	}
	
	
}

var $a = numSplit(24);
zhjdg 2013-11-26
  • 打赏
  • 举报
回复
function numSplit(num,result){
	var splitUnit = [2,3,5,7];
	var $a;
	if(typeof result == 'undefined'){
		result = []
	}
	if(($a = parseInt(num/splitUnit[0])) & ($a*splitUnit[0] == num)){
		result.push(splitUnit[0]);
		return numSplit($a,result);
	}
	if(($a = parseInt(num/splitUnit[1])) & ($a*splitUnit[1] == num)){
		result.push(splitUnit[1]);
		return numSplit($a,result);
	}
	if(($a = parseInt(num/splitUnit[2])) & ($a*splitUnit[2] == num)){
		result.push(splitUnit[2]);
		return numSplit($a,result);
	}
	if(($a = parseInt(num/splitUnit[3])) & ($a*splitUnit[3] == num)){
		result.push(splitUnit[3]);
		return numSplit($a,result);
	}
	
	if(result.length == 0){
		return '1 * ' +num;
	}else{
		return result.join('*');
	}
	
	
}

var $a = numSplit(15);
张运领 2013-11-26
  • 打赏
  • 举报
回复
function getArray(num){
		var arr = [];
		while(num >=2){
			for(var i=2;i<=num;i++){
				if(num%i == 0){
					arr.push(i);
					num = num/i;
					break;
				}
			}
		}
		return arr;
	}
只是分解成质数的话,这样应该就可以了吧。 循环次数,就是左边那个数。 如果需要作出,所有可乘的组合,那就把返回的数组,进行组合就可以了 不过组合时,有重复的数字的时候,处理就有些麻烦了。
似梦飞花 2013-11-26
  • 打赏
  • 举报
回复
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script type="text/javascript"> function isS(num){ if(num<=2){ return num; } for(var i=2;i<num/2;i++){ if(num%i==0){ return 0; } } return num; } function isS2(num){ if(isS(num)){ return "1*"+num; } var a=[]; var s=1; var k=num; for(var i=2;i<=k;i++){ if(isS(i)&&k%i==0){ a.push(i); k=k/i; i=1; } } for(var i=0;i<a.length;i++){ s*=a[i]; } if(s==num){ return a.join('*'); }else{ return "--"; } } alert(isS2(15)); alert(isS2(24)); alert(isS2(17)); alert(isS2(18)); </script> </head> <body> </body> </html> 用最笨的方法遍历试试

87,914

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧