Advertisement
Guest User

Untitled

a guest
Feb 1st, 2015
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.99 KB | None | 0 0
  1. object Main extends App
  2. {
  3.     val max = BigDecimal(10).pow(3)
  4.     var cnt = 0
  5.  
  6.     val wks = Array.fill[Worker](4)(null)
  7.  
  8.     class Worker(i: BigDecimal) extends Runnable
  9.     {
  10.         var n = i
  11.         var done = false
  12.  
  13.         def check =
  14.         {
  15.             println(s"Thread $i: on number $n of $max - ${math.min(100.0, math.ceil(n.toDouble / max.toDouble * 100.0)).toInt}% done")
  16.             done
  17.         }
  18.  
  19.         def run =
  20.         {
  21.             while (n < max)
  22.             {
  23.                 if (!BigDecimal(math.sqrt(n.toDouble)).isWhole)
  24.                 {
  25.                     var divs = 2
  26.                     var j = BigDecimal(2)
  27.                     var to = n / 2
  28.                     while (j < to)
  29.                     {
  30.                         val ans = n / j
  31.                         if (n % j == BigDecimal(0))
  32.                         {
  33.                             to = n / j
  34.                             divs += 2
  35.                         }
  36.  
  37.                         j += 1
  38.                     }
  39.                     if (divs == 8)
  40.                         cnt += 1
  41.                 }
  42.  
  43.                 n += wks.length
  44.             }
  45.  
  46.             done = true
  47.         }
  48.     }
  49.  
  50.     for (i <- 0 until wks.length)
  51.     {
  52.         wks(i) = new Worker(i)
  53.         new Thread(wks(i)).start
  54.     }
  55.  
  56.     while (wks.count(w => !w.check) > 0)
  57.     {
  58.         println
  59.         Thread.sleep(1000)
  60.     }
  61.  
  62.     println(s"\nDone. $cnt")
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement