/**
* Problem 251: Cardano Triplets.<br>i
* 20 June 2009<br>
* <br>
* A triplet of positive integers (a,b,c) is called a Cardano Triplet if it
* satisfies the condition:<br>
* cubeSquare(a + b * root(c)) + cubeSquare(a - b * root(c)) = 1<br>
* For example, (2,1,5) is a Cardano Triplet.<br>
* <br>
* There exist 149 Cardano Triplets for which a+b+c <= 1000.<br>
* <br>
* <b>Find how many Cardano Triplets exist such that a+b+c <= 110,000,000.</b><br>
* <br>
* Note: This problem has been changed recently, please check that you are
* using the right parameters.<br>
* <br>
* <hr>
* <pre>
* Solution:
* cbrt(a + b * sqrt(c)) + cbrt(a - b * sqrt(c)) = 1 <-->
* c = (8 * a ^ 3 + 15 * a ^ 2 + 6 * a - 1)/ (27 * b ^ 2) (Solved in Wolfram Alpha)
* Or:
* c = n / (27 * b ^ 2) (1)
* Where:
* n = 8 * a ^ 3 + 15 * a ^ 2 + 6 * a - 1 (2)
* For c > 1, from (1):
* b < sqrt(n / 27) (3)
* For:
* a + b + c <= L
*
* </pre>
*/
type Cardano
= ( Int, Int, Int
) type OptCardano
= Option
[ Cardano
]
def evaluateA
( a
: Int, max
: Int
) : Int
= {
val num
= 8 * a
* a
* a +
15 * a
* a +
6 * a -
1
def evaluateB
( b
: Int, qty
: Int
) : Int
= { qty
val ( c, remC
) = /
% ( num,
27 * b
* b
) if ( remC
== 0 && ( a + b + c
< max
) ) { log( "%,11d + %,11d + %,11d = %,11d" .format ( a, b, c, ( a + b + c) ) )
evaluateB( b - 1 , qty + 1 )
evaluateB( b - 1 , qty)
}
}
}
val bMax
= Math.
sqrt ( num /
27 ) .
toInt evaluateB( bMax, 0 )
}
def main
( args
: Array
[ String
] ) : Unit
= {
val t0
= System.
currentTimeMillis val result
= ( 1 to max
) .
foldLeft ( 0 ) ( ( sum, a
) => sum + evaluateA
( a, max
) ) val deltaT
= System.
currentTimeMillis - t0
println( "=" * 80 )
log( result)
log( "Total Time: " + deltaT + " ms" )
}
}
cGFja2FnZSBldWxlclByb2plY3QKCi8qKgogKiBQcm9ibGVtIDI1MTogQ2FyZGFubyBUcmlwbGV0cy48YnI+aQogKiAyMCBKdW5lIDIwMDk8YnI+CiAqIDxicj4KICogQSB0cmlwbGV0IG9mIHBvc2l0aXZlIGludGVnZXJzIChhLGIsYykgaXMgY2FsbGVkIGEgQ2FyZGFubyBUcmlwbGV0IGlmIGl0IAogKiBzYXRpc2ZpZXMgdGhlIGNvbmRpdGlvbjo8YnI+CiAqIGN1YmVTcXVhcmUoYSArIGIgKiByb290KGMpKSArIGN1YmVTcXVhcmUoYSAtIGIgKiByb290KGMpKSA9IDE8YnI+CiAqIEZvciBleGFtcGxlLCAoMiwxLDUpIGlzIGEgQ2FyZGFubyBUcmlwbGV0Ljxicj4KICogPGJyPgogKiBUaGVyZSBleGlzdCAxNDkgQ2FyZGFubyBUcmlwbGV0cyBmb3Igd2hpY2ggYStiK2MgPD0gMTAwMC48YnI+CiAqIDxicj4KICogPGI+RmluZCBob3cgbWFueSBDYXJkYW5vIFRyaXBsZXRzIGV4aXN0IHN1Y2ggdGhhdCBhK2IrYyA8PSAxMTAsMDAwLDAwMC48L2I+PGJyPgogKiA8YnI+CiAqIE5vdGU6IFRoaXMgcHJvYmxlbSBoYXMgYmVlbiBjaGFuZ2VkIHJlY2VudGx5LCBwbGVhc2UgY2hlY2sgdGhhdCB5b3UgYXJlIAogKiB1c2luZyB0aGUgcmlnaHQgcGFyYW1ldGVycy48YnI+CiAqIDxicj4KICogPGhyPgogKiA8cHJlPgogKiBTb2x1dGlvbjoKICogY2JydChhICsgYiAqIHNxcnQoYykpICsgY2JydChhIC0gYiAqIHNxcnQoYykpID0gMSA8LS0+IAogKiBjID0gKDggKiBhIF4gMyArIDE1ICogYSBeIDIgKyA2ICogYSAtIDEpLyAoMjcgKiBiIF4gMikgKFNvbHZlZCBpbiBXb2xmcmFtIEFscGhhKQogKiBPcjoKICogYyA9IG4gLyAoMjcgKiBiIF4gMikgKDEpCiAqIFdoZXJlOiAKICogbiA9IDggKiBhIF4gMyArIDE1ICogYSBeIDIgKyA2ICogYSAtIDEgKDIpCiAqIEZvciBjID4gMSwgZnJvbSAoMSk6CiAqIGIgPCBzcXJ0KG4gLyAyNykgKDMpCiAqIEZvcjoKICogYSArIGIgKyBjIDw9IEwKICogCiAqIDwvcHJlPgogKi8Kb2JqZWN0IFByb2JsZW0yNTFhIHsKICBpbXBvcnQgVXRpbHMuXwogIAogIHR5cGUgQ2FyZGFubyA9IChJbnQsIEludCwgSW50KQogIHR5cGUgT3B0Q2FyZGFubyA9IE9wdGlvbltDYXJkYW5vXQogIAogIGRlZiBldmFsdWF0ZUEoYTogSW50LCBtYXg6IEludCk6IEludCA9IHsKICAgIAogICAgdmFsIG51bSA9IDggKiBhICogYSAqIGEgKyAxNSAqIGEgKiBhICsgNiAqIGEgLSAxCiAgICAKICAgIGRlZiBldmFsdWF0ZUIoYjogSW50LCBxdHk6IEludCk6IEludCA9IHsKICAgICAgaWYoYiA8IDEpIHsKICAgICAgICBxdHkKICAgICAgfSBlbHNlIHsKICAgICAgICB2YWwgKGMsIHJlbUMpID0gLyUobnVtLCAyNyAqIGIgKiBiKQogICAgICAgIGlmKHJlbUMgPT0gMCAmJiAoYSArIGIgKyBjIDwgbWF4KSkgewogICAgICAgICAgbG9nKCIlLDExZCArICUsMTFkICsgJSwxMWQgPSAlLDExZCIuZm9ybWF0KGEsIGIsIGMsIChhICsgYiArIGMpKSkKICAgICAgICAgIGV2YWx1YXRlQihiIC0gMSwgcXR5ICsgMSkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZXZhbHVhdGVCKGIgLSAxLCBxdHkpCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAKICAgIHZhbCBiTWF4ID0gTWF0aC5zcXJ0KG51bSAvIDI3KS50b0ludAogICAgZXZhbHVhdGVCKGJNYXgsIDApCiAgfQogIAogIGRlZiBtYWluKGFyZ3MgOiBBcnJheVtTdHJpbmddKSA6IFVuaXQgPSB7CiAgICB2YWwgbWF4ID0gMTEwMDAwMDAwCiAgICAKICAgIHZhbCB0MCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcwogICAgdmFsIHJlc3VsdCA9ICgxIHRvIG1heCkuZm9sZExlZnQoMCkoKHN1bSwgYSkgPT4gc3VtICsgZXZhbHVhdGVBKGEsIG1heCkpCiAgICB2YWwgZGVsdGFUID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzIC0gdDAKICAgIAogICAgcHJpbnRsbigiPSIgKiA4MCkKICAgIGxvZyhyZXN1bHQpCiAgICBsb2coIlRvdGFsIFRpbWU6ICIgKyBkZWx0YVQgKyAiIG1zIikKICB9Cn0=
compilation info
/opt/scala/bin/scalac: line 50: /dev/null: Permission denied
Main.scala:36: error: not found: value Utils
import Utils._
^
Main.scala:49: error: not found: value /%
val (c, remC) = /%(num, 27 * b * b)
^
Main.scala:50: error: overloaded method value + with alternatives:
(x: Double)Double <and>
(x: Float)Float <and>
(x: Long)Long <and>
(x: Int)Int <and>
(x: Char)Int <and>
(x: Short)Int <and>
(x: Byte)Int <and>
(x: String)String
cannot be applied to (Any)
if(remC == 0 && (a + b + c < max)) {
^
Main.scala:51: error: not found: value log
log("%,11d + %,11d + %,11d = %,11d".format(a, b, c, (a + b + c)))
^
Main.scala:71: error: not found: value log
log(result)
^
Main.scala:72: error: not found: value log
log("Total Time: " + deltaT + " ms")
^
6 errors found
spoj: The program compiled successfully, but Main.class was not found.
Class Main should contain method: def main(args: Array[String]).
stdout