分解质因数小脚本

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值