Composite numbers k with no single digit factors whose factors are all substrings of k: Difference between revisions
Content added Content deleted
Line 1,327: | Line 1,327: | ||
</pre> |
</pre> |
||
=={{header|Scala}}== |
=={{header|Scala}}== |
||
for Scala3 |
|||
<syntaxhighlight lang="scala"> |
<syntaxhighlight lang="scala"> |
||
def isComposite(num: Int): Boolean = { |
|||
val numStr = num.toString |
|||
def iter(n: Int, start: Int): Boolean = { |
|||
val limit = math.sqrt(n).floor.toInt |
|||
(start to limit).dropWhile(n % _ > 0).headOption match { |
|||
case Some(v) if v < 10 => false |
|||
case Some(v) => |
|||
if (v == start || numStr.contains(v.toString)) iter(n / v, v) |
|||
else false |
|||
case None => n < num && numStr.contains(n.toString) |
|||
} |
|||
} |
|||
iter(num, 2) |
|||
} |
|||
def composites = Iterator.from(121, 2).filter(isComposite(_)) |
|||
@main def main = { |
|||
val start = System.currentTimeMillis |
|||
composites.take(20) |
|||
.grouped(10) |
|||
.foreach(grp => println(grp.map("%8d".format(_)).mkString(" "))) |
|||
val time = System.currentTimeMillis - start |
|||
println(s"time elapsed: $time ms") |
|||
} |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||