Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
44
Task/Arithmetic-Rational/Scala/arithmetic-rational-1.scala
Normal file
44
Task/Arithmetic-Rational/Scala/arithmetic-rational-1.scala
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
class Rational(n: Long, d:Long) extends Ordered[Rational]
|
||||
{
|
||||
require(d!=0)
|
||||
private val g:Long = gcd(n, d)
|
||||
val numerator:Long = n/g
|
||||
val denominator:Long = d/g
|
||||
|
||||
def this(n:Long)=this(n,1)
|
||||
|
||||
def +(that:Rational):Rational=new Rational(
|
||||
numerator*that.denominator + that.numerator*denominator,
|
||||
denominator*that.denominator)
|
||||
|
||||
def -(that:Rational):Rational=new Rational(
|
||||
numerator*that.denominator - that.numerator*denominator,
|
||||
denominator*that.denominator)
|
||||
|
||||
def *(that:Rational):Rational=
|
||||
new Rational(numerator*that.numerator, denominator*that.denominator)
|
||||
|
||||
def /(that:Rational):Rational=
|
||||
new Rational(numerator*that.denominator, that.numerator*denominator)
|
||||
|
||||
def unary_~ :Rational=new Rational(denominator, numerator)
|
||||
|
||||
def unary_- :Rational=new Rational(-numerator, denominator)
|
||||
|
||||
def abs :Rational=new Rational(Math.abs(numerator), Math.abs(denominator))
|
||||
|
||||
override def compare(that:Rational):Int=
|
||||
(this.numerator*that.denominator-that.numerator*this.denominator).toInt
|
||||
|
||||
override def toString()=numerator+"/"+denominator
|
||||
|
||||
private def gcd(x:Long, y:Long):Long=
|
||||
if(y==0) x else gcd(y, x%y)
|
||||
}
|
||||
|
||||
object Rational
|
||||
{
|
||||
def apply(n: Long, d:Long)=new Rational(n,d)
|
||||
def apply(n:Long)=new Rational(n)
|
||||
implicit def longToRational(i:Long)=new Rational(i)
|
||||
}
|
||||
15
Task/Arithmetic-Rational/Scala/arithmetic-rational-2.scala
Normal file
15
Task/Arithmetic-Rational/Scala/arithmetic-rational-2.scala
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
def find_perfects():Unit=
|
||||
{
|
||||
for (candidate <- 2 until 1<<19)
|
||||
{
|
||||
var sum= ~Rational(candidate)
|
||||
for (factor <- 2 until (Math.sqrt(candidate)+1).toInt)
|
||||
{
|
||||
if (candidate%factor==0)
|
||||
sum+= ~Rational(factor)+ ~Rational(candidate/factor)
|
||||
}
|
||||
|
||||
if (sum.denominator==1 && sum.numerator==1)
|
||||
printf("Perfect number %d sum is %s\n", candidate, sum)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue