大数字:超分解


25

该问题已重做,请重新阅读。

超析因

超析因数是可以使用以下函数生成的数字序列:

a(n) = n! ^ n!

最终值迅速上升。 旁注:这是OEIS中的条目A046882。同样与之相关的是超分解因子,它仍然非常庞大,但是序列较小:A002109

你的任务

您的任务是将这些数字转换为您的语言。你的程序将计算所有ultrafactorials之和从0到包容性 n

输入项

您的程序可能只接受一个输入:一个数字,类似于要添加到总和中的最后一个a(n)超因子。确保输入为正或0。

输出量

只要某处有可见的数字总和,输出就完全取决于您。

规则

  • 您可以假设所有整数,也就是所有整数输入,并使用整数计数循环产生一些结果。

测试用例

Input: -1
Output: Any kind of error (because -1! is undefined), or no handling at all

Input: 0
Output: 1

Input: 1
Output: 2

Input: 2
Output: 6

Input: 3
Output: 46662

挑战

这是,因此长度最小的答案以字节为单位!


2
我们需要考虑任意大的整数吗?还是足以应付该语言的默认数据类型(例如double)支持的最大数据量?
路易斯·门多

1
转换代码和输出取决于您,输入将是一个整数。@LuisMendo
devRicher

3
在许多人回答后更改规则也不是一件好事。每当您要提交挑战时,请按照建议使用沙盒
瑕疵的

Answers:


7

05AB1E,5个字节

码:

Ý!DmO

说明:

Ý       # Take the range [0, ..., input]
 !      # Map factorial over each element
  Dm    # Exponentiate each element to itself
    O   # Take the sum

使用CP-1252编码。在线尝试!


L!DmO如果要取消“ CP-1252编码”位,也可以使用。
魔术章鱼缸

16

Mathematica,19个字节

Sum[n!^n!,{n,0,#}]&

非常清楚的代码的道歉;)


使用mathematica进行mathematica-迪克移动:D
先验的

8

果冻,6个字节

在线尝试!

‘Ḷ!*`S // Main link: Argument n (integer)
‘      // Take n, increment by 1
 Ḷ     // Range from [0..n]
  !    // Calculates factorial for each [0..n]
   *`  // Raises each [0!..n!] to the power of itself
     S // Sum the resulting array

有一个增量原子,所以R!*`S‘保存了一个字节(我去了‘Ḷ!*`S)。
乔纳森·艾伦

1
在看到您的评论之前,我实际上是在编辑过程中:P
Xanderhall,2016年

我也看到了,干得好。
乔纳森·艾伦

6

R- 34 30字节

x=factorial(0:scan());sum(x^x)

向量化很好

编辑:由于@MickyT,节省了4个字节


1
您可以将扫描移动到阶乘中来缩短它的位置x=factorial(0:scan());sum(x^x)
MickyT 2016年

4

J,15 12字节

多亏了英里,节省了3个字节!

1#.i.^~@!@,]

说明

1#.i.^~@!@,]  input: y
          ,]  append y to list...
   i.         [0, y)
        !@    factorial each member
     ^~@      raise each to itself
1#.           perform summation

测试用例

   f =: 1#.i.^~@!@,]
   (,. f"0) i.4
0     1
1     2
2     6
3 46662
   (,. f"0) i.6
0           1
1           2
2           6
3       46662
4  1.33374e33
5 3.17504e249

   echo"1] _90]\":f 6x
190281878633201797429473437859705759836595323046380462211756876146775419721154680216391116
383660154937824558291984804764687140715927099993629348072943551413397410741069111169123658
220861477766905534108349401724389611558474171816216027733366046875815097164882588181826712
426524007417126023680300953790645455254723360874298622143752208989152655091222094594342956
890526202094068774356589887610542642450567071133028553816930267473112879050178461179814798
008667622200592591542432361632955904924276854403585221477449385731481108378608652069211835
448555831555820393949831627809528917004144455150642180845929102272754394116905511650997561
389917179995442329297103257850695109383021080317204810134810158543814178231002423431556657
737982683316707709406053569620116083909440177269311235173671447595521339849978144493268530
780365729831790064477684808893338190825461650933123545889305523546630119181308584140916288
912561260392366609493077363059677222110731132927863243720195975705161197786520981159422881
575250362836779593393897664990291828935858671453835924398316498051705698128484688847592380
831018330553151156822298060174230201841578757499203145955456593022852288527824268115043999
037373974753999860179933517198889966353093307592136928730661270863274130109304971274296438
682725017433937245229524959283895094220677649257613358344409711070780405579776000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000003175042373780336892901667920556557182493442088021222004926225128381629943118937129
098831435345716937405655305190657814877412786176000000000000000000000000000000000000000000
000000000000000000000000000000000000000000001333735776850284124449081472890438

1#.i.^~@!@,]减少了几个字节。
英里

@miles哦,太酷了。我不知道1#.执行求和。如果这还不是小费,那么您绝对应该添加它!
科纳·奥布莱恩

4

Perl 6的41 38 37个字节

{[+] ([**] [*](1..$_)xx 2 for 0..$_)}

{[+] ([**] ([*] 1..$_)xx 2 for 0..$_)}

{sum (($_**$_ with [*] 1..$_) for 0..$_)}

在线尝试。

说明:

  • for 0 .. $_:对于从0到输入的每个整数,
  • [*](1 .. $_) xx 2:两次计算阶乘,
  • [**] ...:并对两个相同的阶乘取幂。
  • [+] ...:然后将循环的所有结果相加。

感谢b2gills提供了1个字节。


([*] …)可以写为[*](…)保存一个字节
Brad Gilbert b2gills

3

Cheddar44 37字节

n->(0|>n=>(i,a=(1|>i)/(*))->a**a)/(+)

感谢山羊减少操作员!我认为添加阶乘是个好主意

在线尝试

不打高尔夫球

n -> ( 0|>n => (i, a=(1|>i) / (*)) -> a ** a) / (+)

说明

注意:有些过时,将修复

n ->           // Input
( 0 |> n) =>   // Run below for each of [0, n]
    (              
      i,           // Input
      a =          // Let's keep n! in this variable `a`
         (1 |> i)  // Range from [1, n]
         / (*)     // Multiply all the items of that range
                   // `/` is reduce `(*)` is multiplication function
    ) ->
    a ** a         // A to the power of A
) / (+)        // Sum all results

谢谢上帝在这里不是有点冒昧吗?:D
瑕疵的2016年

@flawr好的。固定的:P
山羊

2
哈哈,更好,也许是我们在这里最近见到的山羊的少数合法用法之一:)
更加模糊的

3

MATL,7个字节

Q:Ygt^s

在线尝试!

说明

Q         % Take input n implicitly. Add 1
 :        % Range [1 2 ... n+1]
  Yg      % Gamma function, element-wise. This gives [0! 1! ... n!]
    t^    % Rise result to itself, element-wise
      s   % Sum all values. Implicitly display

3

PHP,49字节

for($f=1;$i<=$argv[1];$f*=++$i)$s+=$f**$f;echo$s;

INF适用n>5于64位系统。

对于大数字,为70个字节

while($i<=$argv[1])$s=gmp_add($s,gmp_pow($f=gmp_fac($i++),$f));echo$s;

需要使用PHP进行编译 --with-gmp


3

红宝石, 64 66个字节

->n{(o=(1..n).map{|i|a=(1..i).inject(:*);a**a}.inject(:+))?o+1:1}

为不完整的错误修正添加了两个字符(稍后将考虑缩短注入调用)。


我对Ruby不好,但是不能用a=(0..i)代替a=(1..i)吗?
Timtech '16

@Timtech期望向乘法中注入零不会给任何人带来任何好处:(
DepressedDaniel

是的,我想添加+1是最好的解决方案。
Timtech '16

@GB对n = 0的情况应用了简单的修复程序。
DepressedDaniel


2

Haskell,67 56字节

请注意,此提交是删除禁止内置的规则之前进行的。

p=product
a n=sum[p[x|x<-[p[1..i]],_<-[1..x]]|i<-[0..n]]

例如:

*Main> a 0
1
*Main> a 1
2
*Main> a 2
6
*Main> a 3
46662
*Main> a 4
1333735776850284124449081472890438
*Main> a 5
3175042373780336892901667920556557182493442088021222004926225128381629943118937129098831435345716937405655305190657814877412786176000000000000000000000000000000000000000000000000000000000000000000000000000000000000001333735776850284124449081472890438

2

Python 2,73 72字节

import math
lambda n,f=math.factorial:sum(f(i)**f(i)for i in range(n+1))


2

R,42 35字节

既然我已经正确地阅读了问题,那么我将总和投入了。

这需要gmp(多精度算术)库可用。这允许处理大量数字。否则,返回5以上的任何值INF

这被实现为一个未命名的函数,以避免as.character通过输出到STDOUT所需的函数。cat

function(x)sum((i=gmp::factorialZ(0:x))^i)

运行示例

> f <- function(x)sum((i=gmp::factorialZ(0:x))^i)
> f(5)
Big Integer ('bigz') :
[1] 3175042373780336892901667920556557182493442088021222004926225128381629943118937129098831435345716937405655305190657814877412786176000000000000000000000000000000000000000000000000000000000000000000000000000000000000001333735776850284124449081472890438
> f(6)
Big Integer ('bigz') :
[1] 190281878633201797429473437859705759836595323046380462211756876146775419721154680216391116383660154937824558291984804764687140715927099993629348072943551413397410741069111169123658220861477766905534108349401724389611558474171816216027733366046875815097164882588181826712426524007417126023680300953790645455254723360874298622143752208989152655091222094594342956890526202094068774356589887610542642450567071133028553816930267473112879050178461179814798008667622200592591542432361632955904924276854403585221477449385731481108378608652069211835448555831555820393949831627809528917004144455150642180845929102272754394116905511650997561389917179995442329297103257850695109383021080317204810134810158543814178231002423431556657737982683316707709406053569620116083909440177269311235173671447595521339849978144493268530780365729831790064477684808893338190825461650933123545889305523546630119181308584140916288912561260392366609493077363059677222110731132927863243720195975705161197786520981159422881575250362836779593393897664990291828935858671453835924398316498051705698128484688847592380831018330553151156822298060174230201841578757499203145955456593022852288527824268115043999037373974753999860179933517198889966353093307592136928730661270863274130109304971274296438682725017433937245229524959283895094220677649257613358344409711070780405579776000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003175042373780336892901667920556557182493442088021222004926225128381629943118937129098831435345716937405655305190657814877412786176000000000000000000000000000000000000000000000000000000000000000000000000000000000000001333735776850284124449081472890438

f(9)可以很好地运行,但是会填满许多页面。几百个左右的数字2,017,528。f(10)杀死了我计算机上的会话。


我认为其与其他答案不同的原因是,您应该从0!^ 0!返回总和!到N!^ N!。但这很容易通过更改为来修改factorialZ(0:x)。是否有不使用此base::factorial()功能的特定原因?
JAD

1
@JarkoDubbeldam感谢抓到。需要更好地阅读问题:)。我gmp::factorialZ用来处理大数字。
MickyT

2

JavaScript(ES7),38个字节

f=(n,a=1,i=0)=>i>n?0:a**a+f(n,a*++i,i)

@ fəˈnɛtɪk对不起,习惯的力量。
尼尔

1

Pyke,11个字节

hFSBD]1*B)s

在这里尝试!

hF          -  for i in range (0, input+1)
  SB        -     product(range(1, i+1)
    D]1*    -    [^]*^
        B   -   product(^)
          s - sum(^)

有趣的事实:Pyke没有内置阶乘,因为SB只有2个字节!


1

Haskell,43个字节

b n|f<-product[1..n]=f^f
a n=sum$b<$>[0..n]

用法示例:a 3-> 46662

b计算单个超因子并将a所有超因子从0到相加n


1

JavaScript(ES7),44个字节

g=n=>n?(f=a=>a?a*f(a-1):1)(n)**f(n)+g(n-1):1

1

Python 2,82字节

x=input()
s=0
for z in range(x):
 t=1
 for i in range(z+1):t*=i+1
 s+=t**t
print s

您是否尝试过汇总列表理解?
2016年

1
您只使用过一次x,因此可以使用range(input())它删除一些字节
乔治

1

奇迹,33字节

@sum(->@^ f\prod rng1#0f)rng0+1#0

用法:

(@sum(->@^ f\prod rng1#0f)rng0+1#0)3

说明

rng0+1#0

创建从0到输入的包含范围。

->@^ f\prod rng1#0f

使用以下函数映射范围:1)计算项目的阶乘,2)将结果存储到f,3)计算f^f

sum

和。


1

TI基本(13字节)

sum(seq(A!^A!,A,0,Ans

PS 如果操作系统较新(大小不变)sum(seq(Σ(则可以替换为。


1

GameMaker语言,97字节

主要功能(52字节)

for(a=0;a<=argument0;a++)b+=power(f(a),f(a))return b

函数f(45字节)

a=argument0 if!a return 1else return a*f(a--)

1

Ruby 2,41个字节

->n{(1..n).reduce(s=1){|t,i|t+(s*=i)**s}}

太棒了!s在将其作为初始t值传递以减少/注入的同时,它非常聪明地进行初始化。
DepressedDaniel

可以打个高尔夫球,->n{((t=s=1)..n).map{|i|t+=(s*=i)**s};t}或者->n{t=s=1;(1..n).map{|i|t+=(s*=i)**s};t}
DepressedDaniel

1

Dyalog APL,10个字节

(+/!*!)0,⍳

怎么样?

输入范围

0, 前面有0

!*! 应用 x! ^ x!

+/


*并且!是标量函数,因此请使用数组:+/*⍨!0,⍳⎕或者(+/!*!)0,⍳如果您真的想要火车。
ADAM

0

Mathematica,19个字节

Sum[a!^a!,{a,0,#}]&

匿名函数。以数字作为输入,并返回数字作为输出。


1
我们不能使用阶乘或指数内建函数。
Downgoat

0

Brachylog,12个字节

y:{$!F:F^}a+

在线尝试!

说明

y                 The list [0, ..., Input]
 :{      }a       Apply the predicate below to each element of that list
           +      The output is the sum of the results

   $!F              F is the factorial of the input
      :F^           Output = F^F

0

C#,79字节,带控制台输出

n=>{int i=1,j=1;for(;i<=n;i++)j*=i;System.Console.Write(System.Math.Pow(j,j));}

C#,返回64个字节

n=>{int i=1,j=1;for(;i<=n;i++)j*=i;return System.Math.Pow(j,j);}

0

其实11 10字节

1+r`!;ⁿ`MΣ

怎么运行的

Program takes implicit input, implicit print at EOF
1+          Add one to the input n+1
  r         Create a range (0,1,..,n)
   `   `    Create a function between the two `
    !       Factorialize the current stack item
     ;      Duplicate the current stack item
      ⁿ     Power a,b from the current stack item
         M  Map the function across the stack top item
          Σ Sum the stack together

0

拍子54个字节

(for/sum((i(+ 1 n)))(let((t(factorial i)))(expt t t)))

取消高尔夫:

#lang racket
(require math)

(define (f n)
  (for/sum ((i (+ 1 n)))
    (let ((t (factorial i)))
      (expt t t))))

测试:

(f -1)
(f 0)
(f 1)
(f 2)
(f 3)

输出:

0
1
2
6
46662
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.