--- 110.sml 2007-12-21 19:45:26.606130399 +0000+++ 110-3.sml 2007-12-21 20:58:19.679130289 +0000@@ -13,16 +13,30 @@
fun loop _ [] _ prod sum _ =
if prod = sum then print (toString sum ^ "\n") else ()
| loop (p::ps) (b::bs) bound prod sum start = let
+ fun pow (x, y) = let+ fun loop r 0 = 1+ | loop r 1 = r+ | loop r n = let+ val z = r * x+ in+ if z <= bound then loop z (n - 1)+ else bound + 1+ end+ in+ loop x y+ end+
fun f x = let
val pp = pow (p, x)
in
if pp <= bound then
- loop ps bs (bound div pp) (prod * pp) (sum + b * fromInt x) 0+ loop ps bs (bound div pp) (prod * pp) (sum + b * x) 0
else ()
end
open Int
- val lst = List.tabulate (10 - start, fn x => x + start)+ val lst = if start = 0 then [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]+ else [1, 2, 3, 4, 5, 6, 7, 8, 9]
in
app f lst
end
omoikani
#4926()
[
diff
]
Rating0/0=0.00
独自のpowでさらに枝刈り。20桁での時間は約4時間までになりました。
Rating0/0=0.00-0+