<!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>
用最笨的方法遍历试试
<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>
用最笨的方法遍历试试
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;
}只是分解成质数的话,这样应该就可以了吧。循环次数,就是左边那个数。如果需要作出,所有可乘的组合,那就把返回的数组,进行组合就可以了不过组合时,有重复的数字的时候,处理就有些麻烦了。
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);
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);
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));
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.