challenge exp(pi * sqrt(n))が整数に近くなるnを探す

1以上200未満の整数nのうち、 exp(pi * sqrt(n))がほとんど整数であるようなnを求めるコードを書いてください。 なお、expは底がeである指数関数 - Wikipedia、 piは円周率、sqrtは平方根です。また「ほとんど整数である」とは 整数からプラスマイナス0.0001の範囲にあることとします。

Pythonで34行のスクリプトを書いて得られた出力の例が下のようになります。

37 199148647.999978
58 24591257752.000000
67 147197952743.999999
163 262537412640768744.000000 
この問題は光成さんに教えて頂いた e^{π*sqrt{163}}≒26253741640768744 が元になっています。ご協力ありがとうございました。

Posted feedbacks - Scala

Apfloatを使いました。

それだけじゃ何も芸がない感じだったので、implicitでApfloatをあまり意識せずに書ける様にしました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import org.apfloat._
import scala.runtime._

object findAlmostInt {
  implicit def toApfloat[A <: AnyVal](i:A):Apfloat = {
    new Apfloat(i.toString, 32)
  }
  implicit def toDouble(i:Apfloat):RichDouble = i.doubleValue.toDouble
  val PI = ApfloatMath.pi(32)

  def apply(i:int, j:int) = {
    (i to j-1).filter{n =>
      val x = ApfloatMath.exp(PI.multiply(ApfloatMath.sqrt(n)))
      val y = x.ceil.subtract(x)
      (if(y<0.5){y}else{1.subtract(y)}).abs < 0.0001
    }.toList
  }
}

println(findAlmostInt(1,200))

Index

Feed

Other

Link

Pathtraq

loading...