/**
* Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence
* 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15,
* shows the first 11 ugly numbers. By convention, 1 is included.
* Write a program to find and print the 150th ugly number.
*
*/
var uglyNumbers
= List
(1)
// initialize three choices for the next ugly numbers
var next
_multiple
_2
= uglyNumbers
(i2
) * 2; var next
_multiple
_3
= uglyNumbers
(i3
) * 3; var next
_multiple
_5
= uglyNumbers
(i5
) * 5;
val nextUglyNumber
= min
(next
_multiple
_2, next
_multiple
_3, next
_multiple
_5
) uglyNumbers = uglyNumbers :+ nextUglyNumber
if (nextUglyNumber
== next
_multiple
_2
) { i2 = i2 + 1
next_multiple_2 = uglyNumbers(i2) * 2
}
if (nextUglyNumber
== next
_multiple
_3
) { i3 = i3 + 1
next_multiple_3 = uglyNumbers(i3) * 3
}
if (nextUglyNumber
== next
_multiple
_5
) { i5 = i5 + 1
next_multiple_5 = uglyNumbers(i5) * 5
}
}
for (uglyNumber
<- uglyNumbers
) print(uglyNumber + " ")
def min
(a
: Int, b
: Int, c
: Int
): Int
= (a, b, c
) match { case _ if (a
<= b
&& a
<= c
) => a
case _ if (b
<= a
&& b
<= c
) => b
}
}
LyoqCiAqIFVnbHkgbnVtYmVycyBhcmUgbnVtYmVycyB3aG9zZSBvbmx5IHByaW1lIGZhY3RvcnMgYXJlIDIsIDMgb3IgNS4gVGhlIHNlcXVlbmNlCiAqIDEsIDIsIDMsIDQsIDUsIDYsIDgsIDksIDEwLCAxMiwgMTUsCiAqIHNob3dzIHRoZSBmaXJzdCAxMSB1Z2x5IG51bWJlcnMuIEJ5IGNvbnZlbnRpb24sIDEgaXMgaW5jbHVkZWQuCiAqIFdyaXRlIGEgcHJvZ3JhbSB0byBmaW5kIGFuZCBwcmludCB0aGUgMTUwdGggdWdseSBudW1iZXIuCiAqIAogKi8Kb2JqZWN0IE1haW4gZXh0ZW5kcyBBcHAgewogIHZhciB1Z2x5TnVtYmVycyA9IExpc3QoMSkKICB2YWwgbiA9IDIwCgogIHZhciBpMiA9IDA7CiAgdmFyIGkzID0gMDsKICB2YXIgaTUgPSAwOwoKICAvLyBpbml0aWFsaXplIHRocmVlIGNob2ljZXMgZm9yIHRoZSBuZXh0IHVnbHkgbnVtYmVycwogIHZhciBuZXh0X211bHRpcGxlXzIgPSB1Z2x5TnVtYmVycyhpMikgKiAyOwogIHZhciBuZXh0X211bHRpcGxlXzMgPSB1Z2x5TnVtYmVycyhpMykgKiAzOwogIHZhciBuZXh0X211bHRpcGxlXzUgPSB1Z2x5TnVtYmVycyhpNSkgKiA1OwoKICBmb3IgKGkgPC0gMCB0byBuKSB7CiAgICB2YWwgbmV4dFVnbHlOdW1iZXIgPSBtaW4obmV4dF9tdWx0aXBsZV8yLCBuZXh0X211bHRpcGxlXzMsIG5leHRfbXVsdGlwbGVfNSkKICAgIHVnbHlOdW1iZXJzID0gdWdseU51bWJlcnMgOisgbmV4dFVnbHlOdW1iZXIKCiAgICBpZiAobmV4dFVnbHlOdW1iZXIgPT0gbmV4dF9tdWx0aXBsZV8yKSB7CiAgICAgIGkyID0gaTIgKyAxCiAgICAgIG5leHRfbXVsdGlwbGVfMiA9IHVnbHlOdW1iZXJzKGkyKSAqIDIKICAgIH0KCiAgICBpZiAobmV4dFVnbHlOdW1iZXIgPT0gbmV4dF9tdWx0aXBsZV8zKSB7CiAgICAgIGkzID0gaTMgKyAxCiAgICAgIG5leHRfbXVsdGlwbGVfMyA9IHVnbHlOdW1iZXJzKGkzKSAqIDMKICAgIH0KCiAgICBpZiAobmV4dFVnbHlOdW1iZXIgPT0gbmV4dF9tdWx0aXBsZV81KSB7CiAgICAgIGk1ID0gaTUgKyAxCiAgICAgIG5leHRfbXVsdGlwbGVfNSA9IHVnbHlOdW1iZXJzKGk1KSAqIDUKICAgIH0KICB9CgogIGZvciAodWdseU51bWJlciA8LSB1Z2x5TnVtYmVycykKICAgIHByaW50KHVnbHlOdW1iZXIgKyAiICAgIikKCiAgZGVmIG1pbihhOiBJbnQsIGI6IEludCwgYzogSW50KTogSW50ID0gKGEsIGIsIGMpIG1hdGNoIHsKICAgIGNhc2UgXyBpZiAoYSA8PSBiICYmIGEgPD0gYykgPT4gYQogICAgY2FzZSBfIGlmIChiIDw9IGEgJiYgYiA8PSBjKSA9PiBiCiAgICBjYXNlIF8gPT4gYwogIH0KfQ==