Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object Main extends App
- {
- val max = BigDecimal(10).pow(3)
- var cnt = 0
- val wks = Array.fill[Worker](4)(null)
- class Worker(i: BigDecimal) extends Runnable
- {
- var n = i
- var done = false
- def check =
- {
- println(s"Thread $i: on number $n of $max - ${math.min(100.0, math.ceil(n.toDouble / max.toDouble * 100.0)).toInt}% done")
- done
- }
- def run =
- {
- while (n < max)
- {
- if (!BigDecimal(math.sqrt(n.toDouble)).isWhole)
- {
- var divs = 2
- var j = BigDecimal(2)
- var to = n / 2
- while (j < to)
- {
- val ans = n / j
- if (n % j == BigDecimal(0))
- {
- to = n / j
- divs += 2
- }
- j += 1
- }
- if (divs == 8)
- cnt += 1
- }
- n += wks.length
- }
- done = true
- }
- }
- for (i <- 0 until wks.length)
- {
- wks(i) = new Worker(i)
- new Thread(wks(i)).start
- }
- while (wks.count(w => !w.check) > 0)
- {
- println
- Thread.sleep(1000)
- }
- println(s"\nDone. $cnt")
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement