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

发布于 2024-07-15 04:17:51 字数 210 浏览 7 评论 0原文

受到http://codegolf.com/prime-factors的启发,尝试用最少的方法解决这个问题击键次数。

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

Inspired by http://codegolf.com/prime-factors, try to solve this problem using the least number of keystrokes.

Sadly, you can only compete with Perl/PHP/Python/Ruby and I would love to see this problem solved in other not so traditional languages.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

梦魇绽荼蘼 2024-07-22 04:17:51

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()]))

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

从好的方面来说,它的格式正确。

Python, 214 Characters

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()]))

My first code golf, don't judge. Probably a lot of optimization that could be done.

On the upside, it formats properly.

烟酒忠诚 2024-07-22 04:17:51

Perl

Just 函数 - 返回质因数列表(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

Perl

Just the function - returns a list of prime factors (49 significant* characters):

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

Used to find primes of a constant (23 significant* characters):

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

Used to find primes of a number from user input (28 significant* characters):

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

* "Significant" characters are non-whitespace as well as any whitespace that is needed for proper syntax. For anyone curious, significant whitespace is in bold. :P

z祗昰~ 2024-07-22 04:17:51

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
}

Perl 107 98 characters

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

that's

printf '%d: ', $n = <>;
for ($p = 1; $n >= ++$p;) {
  for ($i = 0;  0 == $n % $p;  $i++) {
    $n /= $p
  }
  print "$p", $i > 1 ? "^$i " : ' ' if $i
}
巴黎盛开的樱花 2024-07-22 04:17:51

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 可以让你毫无抱怨地删除多少空白。

Haskell

I've started to learn Haskell recently - here's an attempt in that lesser known (but very nice) language.

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 characters, but cheating really because again the output format isn't right. I tried to correct the output but couldn't get it less than 208 chars:

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

Any improvements welcomed. On a side note, I was amazed how much whitespace GHC lets you remove without complaining.

萌辣 2024-07-22 04:17:51

PowerShell,146 161 字符

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

目前几乎没有问题。

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)
  })

Almost ungolfed currently.

一瞬间的火花 2024-07-22 04:17:51

Python 127 个字符

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

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文