首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >5秒就能找到派

5秒就能找到派
EN

Code Golf用户
提问于 2014-09-23 01:38:58
回答 4查看 1.5K关注 0票数 11

皮派E (如果您喜欢模糊符号的话)到小数点后的100位是:

代码语言:javascript
复制
8.5397342226735670654635508695465744950348885357651149618796011301792286111573308075725638697104739439...

(OIES A019609) (论证可能的非理性)

您的任务是编写一个接受正整数N的程序,并将Pi*e截断为N位小数。如果N= 2,那么输出应该是8.53

这是一个优化问题,因此能够为N的最高值提供正确输出的提交将获胜。

为了确保所有提交都使用相同的计算能力进行判断,您的代码必须在意为上运行,使用它们支持的任何语言。根据理想常见问题,不登录用户有5秒的运行时间限制。这个5秒限制是您必须使用的限制,而不是登录用户的15秒限制。(有关内存、代码大小等其他限制,请参见常见问题 )

具体来说,任何没有登录到ideone的人都应该能够在ideone上运行您的程序,从1到最大Nmax的所有值都可以运行,并且几乎所有时间都能看到正确的输出。没有任何Time limit exceededMemory limit exceeded等错误。以最大的Nmax获胜。

(实际花费的时间是否超过5秒并不重要,只要一个人不犯错误。“几乎所有的时间”被定义为超过95%的时间用于任何特定的N。

详细信息

  • 你可以使用任何你喜欢的数学方法来计算Pi_e,**但是你不能硬编码输出超过Pi,e或Pi_e**前十位数。
    • 你的程序应该能够工作的任何N,给无限的资源。
    • 您可以使用内置的Pi或e常量,如果您的语言碰巧有它们。

  • 您可能无法访问您的代码以外的网站或资源(如果ideone甚至允许这样做)。
  • 除了硬编码和访问外部资源,一切理想所允许的几乎肯定是好的。
  • 您的输入和输出必须(显然)与任何为i/o提供的理想(stdin/stdout,它似乎只是)一起工作。如果您需要输入N的引号,或者输出类似于ans = ...之类的内容,这是很好的。
  • 请包括一个链接到你的代码的一个理想的片段,以你的Nmax作为输入。
  • 如果有一个平分(只有当多个提交达到64 to的输出字符限制),最高的选票答案获胜。
EN

回答 4

Code Golf用户

发布于 2014-09-23 19:11:35

PARI/GP : 33000

这基本上是在OEIS提供的程序,修改后的输入和格式输出正确。它应该作为一个基线,以击败,如果没有其他。

我想这是正确的。我在100和20k的时候对比了OEIS,两者都匹配。很难在网上找到更多的数字来检查。

对于3.3万美元,大约需要4.5秒,因此很可能会遇到一些小问题。我只是厌倦了摆弄输入和ideone的慢速提交/编译/运行循环。

代码语言:javascript
复制
{ 
    m=eval(input());
    default(realprecision, m+80); 
    x=Pi*exp(1);
    s="8.";
    d=floor(x);
    x=(x-d)*10;
    for (n=1, m, d=floor(x); 
         x=(x-d)*10; 
         s=Str(s,d));
    print(s);
}

Ideone.com链路

票数 4
EN

Code Golf用户

发布于 2014-09-23 06:43:23

Python 3

由于内置的pi和e没有足够的数字,所以我决定计算自己的数字。

代码语言:javascript
复制
import decimal
import math
decimal.getcontext().prec=1000000
decimal=decimal.Decimal;b=2500
print(str(sum([decimal(1/math.factorial(x)) for x in range(b)])*sum([decimal(1/16**i*(4/(8*i+1)-2/(8*i+4)-1/(8*i+5)-1/(8*i+6))) for i in range(b)]))[0:int(input())+2])

IDEOne链路

输出STDIN = 1000:

代码语言:javascript
复制
8.5397342226735669504281233688422467204743749305568824722710929852470173635361001388261308713809518841081669216573834376992066672804294594807026609638293539437286935503772101801433821053915371716284188665787967232464763808892618434263301810056154560438283877633957941572944822034479453916753507796910068912594560500836608215235605783723340714760960119319145912948480279651779184356994356172418603464628747082162475871780202868607325544781551065680583616058471475977367814338295574582450942453416002008665325253385672668994300796223139976640645190237481531851902147391807396201201799703915343423499008135819239684881566321559967077443367982975103648727755579256820566722752546407521965713336095320920822985129589997143740696972018563360331663471959214120971348584257396673542429063767170337770469161945592685537660073097456725716654388703941509676413429681372333615691533682226329180996924321063261666235129175134250645330301407536588271020457172050227357541822742441070313522061438812060477519238440079
票数 2
EN

Code Golf用户

发布于 2014-09-23 15:11:22

Scala - 1790

IDEOne at http://ideone.com/A2CIto.

我们将韦瑟菲尔德公式用于π(以及从这里移植而来的机器公式代码)。我们用普通的幂级数计算e。

代码语言:javascript
复制
object Main extends App {
  import java.math.{BigDecimal => JDecimal}
  import java.math.RoundingMode._
  import scala.concurrent.Future
  import scala.concurrent.Await
  import scala.concurrent.ExecutionContext.Implicits._
  import scala.concurrent.duration._
  val precision = 1800

  def acotPrecision(numDigits: Int)(x: BigDecimal) = {
    val x1 = x.underlying
    val two = JDecimal.valueOf(2)
    val xSquared = x1 pow 2
    val unity = JDecimal.ONE.setScale(numDigits, HALF_EVEN)
    var sum = unity.divide(x1, HALF_EVEN)
    var xpower = new JDecimal(sum.toString)
    var term = unity

    var add = false

    var n = JDecimal.valueOf(3).setScale(numDigits)
    while (term.setScale(numDigits, HALF_EVEN).compareTo(JDecimal.ZERO) != 0) {
      xpower = xpower.divide(xSquared, HALF_EVEN)
      term = xpower.divide(n, HALF_EVEN)
      sum = if (add) sum add term else sum subtract term
      add = !add
      n = n add two
    }
    sum
  }

  def ePrecision(numDigits: Int) = {
    val zero = JDecimal.ZERO
    var sum = zero
    var term = JDecimal.ONE.setScale(numDigits, HALF_EVEN)
    var n = JDecimal.ONE.setScale(numDigits, HALF_EVEN)
    while(term.setScale(numDigits, HALF_EVEN).compareTo(zero) != 0) {
      sum = sum add term
      term = term.divide(n, HALF_EVEN)
      n = n add JDecimal.ONE
    }
    sum
  }

  val acot = acotPrecision(precision) _

  def d(x: Int) = JDecimal.valueOf(x)

  def piFuture = Future(d(4) multiply (
    (d(83) multiply acot(107)) add (d(17) multiply acot(1710)) subtract (d(22) multiply acot(103697))
    subtract (d(24) multiply acot(2513489)) subtract (d(44) multiply acot(18280007883L))
   add (d(12) multiply acot(7939642926390344818L))
   add (d(22) multiply acot(BigDecimal("3054211727257704725384731479018")))
  ))

  def eFuture = Future(ePrecision(precision))

  Await.result(
    for (pi <- piFuture;
         e <- eFuture) yield println((pi multiply e).setScale(precision - 10, DOWN))
  , 5 seconds) 
}
票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/38091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档