Jordan-Pólya numbers: Difference between revisions
Content added Content deleted
(Add Kotlin implementation) |
(Add Swift implementation) |
||
Line 2,115: | Line 2,115: | ||
You may [https://ato.pxeger.com/run?1=fVXbbtQwEH1E2q8YokWyYWuyrSqVFYuEeAHUVkjl8lAuchPvrlvHWdlOL6zyJbzwAv8EX8MkdrLZEJDa1I1nzpw5c8m3nzbhih98__6jcIu9o9_3fslsnRsHl_yas8JJxTbPjeF3x9K6CbzkdnXC1xN4a4RoD2fClaPgV-Oxy_SKvciVEomTuX6R62thnDCWfRmN8otLfA2vc5Ny_SZXd_y0yC7wEjYjAPxZG3nNnYBrruBya4VRYA5a3DQxz49zvfxEaM8lFUmOXKysQtvgEojXLi3781faiaUwEwiHTxUawqViARmXmnCztDOoBTg_c0ZiPDqDd1pWVCq6AIkRGLmTjYeAmsuFUPnNy0KnRqQnUilkhI67SbGFynNDpnH8Jfa_x7QF6JiGTNpqhPR3wUJs1EM7pUn0diVgIY11cBgHyfc8mvaizyIfrAPDuD2rq-j4lSCHMWVf5fqDdKtXOhW3bJFjxskKNpBwK4B4oAnI6pbC_FmNFziQRTT2Bg8O7XgjF6Q2gwcwjWE-hycUoo86AqEQKorKwKbcyaKXlK2zUlgbYd1QUqCEteBWXGOUGDIv_AzGA-UIAXuhKn3JURxPEOCwetbn_fp5gE_aUUH2Um4ZYrqlWw0SlNhV401X86VwRMIeTGmJhR5vXO77jey2c2037EdpV71y1BmLqp8H-rTXyb225GlKpp1W1OLW_W8GoTd5bF04BJi05oMTR2gTwcCCJy43EmPNYXrsK4E6A8kK5eRaSVTu6R7sg8thP6aBNnT8Hs5haxtuK-51lr38JC4kjn6BPMDNSirsZ-nYittTzHYbwfMLxZsjHKvUaD1b32DxdA6VLuyE377nqhDweMuxC-rJ4eul1HXW3r9zHwAxrxage-tLUpfKW9LO7UA5mln9f0kGWq7hSCntsU8KY4R2iIT8Bzz_5rX1YJnAIe6UFydtAoTPoCV10Z6r1dKcmS0ywvG2Q6cc7f79u52fK0WCZI1bo2CiBG86YXB82nnkyHv2b_FwqLxhO1aVA0uFTYRO8T3-R2i7YjOUrVmkV-JuUklaiM4WtdEY39-vVieQ-rJam1Ncm83S_BzBI-9WRp4_y64C2QgeQr0UylHpv_DhQ9988P8A Attempt This Online!] |
You may [https://ato.pxeger.com/run?1=fVXbbtQwEH1E2q8YokWyYWuyrSqVFYuEeAHUVkjl8lAuchPvrlvHWdlOL6zyJbzwAv8EX8MkdrLZEJDa1I1nzpw5c8m3nzbhih98__6jcIu9o9_3fslsnRsHl_yas8JJxTbPjeF3x9K6CbzkdnXC1xN4a4RoD2fClaPgV-Oxy_SKvciVEomTuX6R62thnDCWfRmN8otLfA2vc5Ny_SZXd_y0yC7wEjYjAPxZG3nNnYBrruBya4VRYA5a3DQxz49zvfxEaM8lFUmOXKysQtvgEojXLi3781faiaUwEwiHTxUawqViARmXmnCztDOoBTg_c0ZiPDqDd1pWVCq6AIkRGLmTjYeAmsuFUPnNy0KnRqQnUilkhI67SbGFynNDpnH8Jfa_x7QF6JiGTNpqhPR3wUJs1EM7pUn0diVgIY11cBgHyfc8mvaizyIfrAPDuD2rq-j4lSCHMWVf5fqDdKtXOhW3bJFjxskKNpBwK4B4oAnI6pbC_FmNFziQRTT2Bg8O7XgjF6Q2gwcwjWE-hycUoo86AqEQKorKwKbcyaKXlK2zUlgbYd1QUqCEteBWXGOUGDIv_AzGA-UIAXuhKn3JURxPEOCwetbn_fp5gE_aUUH2Um4ZYrqlWw0SlNhV401X86VwRMIeTGmJhR5vXO77jey2c2037EdpV71y1BmLqp8H-rTXyb225GlKpp1W1OLW_W8GoTd5bF04BJi05oMTR2gTwcCCJy43EmPNYXrsK4E6A8kK5eRaSVTu6R7sg8thP6aBNnT8Hs5haxtuK-51lr38JC4kjn6BPMDNSirsZ-nYittTzHYbwfMLxZsjHKvUaD1b32DxdA6VLuyE377nqhDweMuxC-rJ4eul1HXW3r9zHwAxrxage-tLUpfKW9LO7UA5mln9f0kGWq7hSCntsU8KY4R2iIT8Bzz_5rX1YJnAIe6UFydtAoTPoCV10Z6r1dKcmS0ywvG2Q6cc7f79u52fK0WCZI1bo2CiBG86YXB82nnkyHv2b_FwqLxhO1aVA0uFTYRO8T3-R2i7YjOUrVmkV-JuUklaiM4WtdEY39-vVieQ-rJam1Ncm83S_BzBI-9WRp4_y64C2QgeQr0UylHpv_DhQ9988P8A Attempt This Online!] |
||
=={{header|Swift}}== |
|||
{{trans|Java}} |
|||
<syntaxhighlight lang="Swift"> |
|||
import Foundation |
|||
class JordanPolyaNumbers { |
|||
static var jordanPolyaSet = Set<Int64>() |
|||
static var decompositions = [Int64: [Int: Int]]() |
|||
static func main() { |
|||
createJordanPolya() |
|||
let belowHundredMillion = jordanPolyaSet.filter { $0 <= 100_000_000 }.max() ?? 0 |
|||
let jordanPolya = Array(jordanPolyaSet).sorted() |
|||
print("The first 50 Jordan-Polya numbers:") |
|||
for i in 0..<50 { |
|||
if i % 10 == 9 { |
|||
print("\(jordanPolya[i])\n", terminator: "") |
|||
} else { |
|||
print(String(format: "%5d ", jordanPolya[i]), terminator: "") |
|||
} |
|||
} |
|||
print("\nThe largest Jordan-Polya number less than 100 million: \(belowHundredMillion)\n") |
|||
for i in [800, 1050, 1800, 2800, 3800] { |
|||
print("The \(i)th Jordan-Polya number is: \(jordanPolya[i - 1]) = \(toString(decompositions[jordanPolya[i - 1]] ?? [:]))") |
|||
} |
|||
} |
|||
static func createJordanPolya() { |
|||
jordanPolyaSet.insert(1) |
|||
var nextSet = Set<Int64>() |
|||
decompositions[1] = [:] |
|||
var factorial: Int64 = 1 |
|||
for multiplier in 2...20 { |
|||
factorial *= Int64(multiplier) |
|||
for number in jordanPolyaSet { |
|||
var current = number |
|||
while current <= Int64.max / factorial { |
|||
let original = current |
|||
current *= factorial |
|||
nextSet.insert(current) |
|||
decompositions[current] = decompositions[original]?.merging([multiplier: 1], uniquingKeysWith: +) ?? [:] |
|||
} |
|||
} |
|||
jordanPolyaSet.formUnion(nextSet) |
|||
nextSet.removeAll() |
|||
} |
|||
} |
|||
static func toString(_ aMap: [Int: Int]) -> String { |
|||
var result = "" |
|||
for key in aMap.keys.sorted().reversed() { |
|||
let value = aMap[key] ?? 0 |
|||
result += "\(key)!" + (value == 1 ? "" : "^\(value)") + " * " |
|||
} |
|||
return String(result.dropLast(3)) |
|||
} |
|||
} |
|||
JordanPolyaNumbers.main() |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
The first 50 Jordan-Polya numbers: |
|||
1 2 4 6 8 12 16 24 32 36 |
|||
48 64 72 96 120 128 144 192 216 240 |
|||
256 288 384 432 480 512 576 720 768 864 |
|||
960 1024 1152 1296 1440 1536 1728 1920 2048 2304 |
|||
2592 2880 3072 3456 3840 4096 4320 4608 5040 5184 |
|||
The largest Jordan-Polya number less than 100 million: 99532800 |
|||
The 800th Jordan-Polya number is: 18345885696 = 4!^7 * 2!^2 |
|||
The 1050th Jordan-Polya number is: 139345920000 = 8! * 5!^3 * 2! |
|||
The 1800th Jordan-Polya number is: 9784472371200 = 6!^2 * 4!^2 * 2!^15 |
|||
The 2800th Jordan-Polya number is: 439378587648000 = 14! * 7! |
|||
The 3800th Jordan-Polya number is: 7213895789838336 = 4!^8 * 2!^16 |
|||
</pre> |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |