Bootstrap

分解质因数小脚本

awk语言的版本,如下:

{ x = $0; }

function foo(a)
{
for (i = 2; i <= a; i++)
if (a%i == 0) {printf("%d ",i);return i;}
}

END {
c = foo(x);
while (c < x)
{
x = x / c;
c = foo(x);
}
}

# usage(): $echo 2520 | awk -f script.awk


下边这个是一样思路的Bash版本,不过运行的非常慢。

#!/usr/bin/bash
#usage(): $sh script.sh 2520

function foo ()
{
for i in `seq 2 $1`
do
b=`expr $1 % $i`
if [[ $b -eq 0 ]]
then
printf "%d" $i
return $i
fi
done
}
c=$1
foo $c
a=`foo $c`
while [ $a -ne $c ]
do
c=`expr $c / $a`
printf " * "
foo $c
a=`foo $c`
done
echo


下边这个是python版本,函数有递归:

#!/usr/bin/python
import sys
num = int(sys.argv[1])
def output(num):
for i in range(2,num):
if num % i == 0 :
print i,
output(num/i)
return
print num
return

output(num)
#usage(): python script.py 2520


下边这个是用了递归思路的Bash版本,比上上的那条不用递归的要快一倍左右:

#!/usr/bin/bash
proc()
{
for i in `seq 2 $1`
do
if [ `expr $1 % $i` -eq 0 ]
then echo -n $i," "; proc `expr $1 / $i`
break #此处不加break会有bug
fi
done
}
proc $1
#usage(): $sh script.sh 2520
;