`
polyahu
  • 浏览: 22170 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

分解质因数小脚本

阅读更多
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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics