CodeGolf:计算出给定数字的素因子

时间:2009-03-25 00:31:58

标签: code-golf

http://codegolf.com/prime-factors的启发,尝试使用最少的击键次数解决此问题。

可悲的是,你只能与Perl / PHP / Python / Ruby竞争,我很乐意看到这个问题在其他不那么传统的语言中得到解决。

6 个答案:

答案 0 :(得分:0)

的Perl

只是函数 - 返回素数因子列表(49个重要*字符):

sub p {
  $p = $_[0];
  return if $p == 1;
  $p % $_ or return($_, p($p/$_)) for 2..$p;
}

用于查找常量的素数(23个重要*字符):

$, = " ";
print p(10), "\n";

用于从用户输入中找到数字的素数(28个重要*字符):

$, = " ";
print p(<STDIN>), "\n";

*“重要”字符是非空格以及正确语法所需的任何空格。对于任何好奇的人来说,重要的空白都是粗体。 :P

答案 1 :(得分:0)

Perl 107 98个字符

printf'%d: ',$n=<>;for($p=1;$n>=++$p;){for($i=0;0==$n%$p;$i++){$n/=$p}print$p,
$i>1?"^$i ":" "if$i}

这是

printf '%d: ', $n = <>;
for ($p = 1; $n >= ++$p;) {
  for ($i = 0;  0 == $n % $p;  $i++) {
    $n /= $p
  }
  print "$p", $i > 1 ? "^$i " : ' ' if $i
}

答案 2 :(得分:0)

的Haskell

我最近开始学习Haskell - 这是尝试使用那种鲜为人知(但非常好)的语言。

main=readLn>>=print.f 2
f a 1=[]
f a x=if x`mod`a==0 then show a:f a(x`div`a)else f(a+1)x

89个字符,但是作弊真的是因为输出格式不正确。我试图纠正输出但是不能低于208个字符:

import List
main=readLn>>=w
w n=putStrLn.foldl1(++).v n.map m.group.f 2$n
m a=' ':head a++j(length a)
v n=((s n++":"):)
s=show
j 1=[]
j n='^':s n
f a 1=[]
f a x=if x`mod`a==0 then s a:f a(x`div`a)else f(a+1)x

欢迎任何改进。另外,我很惊讶GHC允许你移除多少空格而不抱怨。

答案 3 :(得分:0)

PowerShell,146 161 chars

$i="$input"
"$i`: "+(
  $(
    for(;$i-gt1){
      for($x=1;++$x-le5e9){
        if(!($i%$x)){
          $i/=$x
          $x
          break
        }
      }
    }
  ) |
  sort |
  group |
  %{
    ''+$_.Name+('^'+$_.Count)*($_.Count-gt1)
  })

目前几乎没有狼吞虎咽。

答案 4 :(得分:0)

Python,214个字符

p=int(raw_input())
def r(x,d):d[x]=d.setdefault(x,0)+1;return d
y=lambda x,d:d==x and {x:1} or x%d and y(x,d+1) or r(d,y(x/d,2))
print "%d: %s"%(p," ".join([`x`+("^"+`c` if ~-c else "") for x,c in y(p,2).items()]))

我的第一个代码高尔夫,不要判断。可能需要做很多优化。

在好的方面,它格式正确。

答案 5 :(得分:0)

Python 127 chars

a=input()
x=2
print'%d:'%a,
while x*x<=a:
 c=0
 while a%x==0:a/=x;c+=1
 if c:print`x`+('','^%d'%c)[c!=1],
 x+=1
if a>1:print a