Anti-primes: Difference between revisions
Content added Content deleted
(Add Swift) |
|||
Line 1,747: | Line 1,747: | ||
[1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040, 7560] |
[1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040, 7560] |
||
</pre> |
</pre> |
||
=={{header|Swift}}== |
|||
<lang swift>extension BinaryInteger { |
|||
@inlinable |
|||
public func countDivisors() -> Int { |
|||
var workingN = self |
|||
var count = 1 |
|||
while workingN & 1 == 0 { |
|||
workingN >>= 1 |
|||
count += 1 |
|||
} |
|||
var d = Self(3) |
|||
while d * d <= workingN { |
|||
var (quo, rem) = workingN.quotientAndRemainder(dividingBy: d) |
|||
if rem == 0 { |
|||
var dc = 0 |
|||
while rem == 0 { |
|||
dc += count |
|||
workingN = quo |
|||
(quo, rem) = workingN.quotientAndRemainder(dividingBy: d) |
|||
} |
|||
count += dc |
|||
} |
|||
d += 2 |
|||
} |
|||
return workingN != 1 ? count * 2 : count |
|||
} |
|||
} |
|||
var antiPrimes = [Int]() |
|||
var maxDivs = 0 |
|||
for n in 1... { |
|||
guard antiPrimes.count < 20 else { |
|||
break |
|||
} |
|||
let divs = n.countDivisors() |
|||
if maxDivs < divs { |
|||
maxDivs = divs |
|||
antiPrimes.append(n) |
|||
} |
|||
} |
|||
print("First 20 anti-primes are \(Array(antiPrimes))")</lang> |
|||
{{out}} |
|||
<pre>First 20 anti-primes are [1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040, 7560]</pre> |
|||
=={{header|Vala}}== |
=={{header|Vala}}== |