-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path085.swift
More file actions
47 lines (43 loc) · 785 Bytes
/
085.swift
File metadata and controls
47 lines (43 loc) · 785 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import Foundation
func readInt() -> Int {
Int(readLine()!)!
}
let k = readInt()
var kSqrt = Int(pow(Double(k), 1.0 / 2.0))
if (kSqrt + 1) * (kSqrt + 1) == k { //x.99999...対策
kSqrt += 1
}
var kCbrt = Int(pow(Double(k), 1.0 / 3.0))
if (kCbrt + 1) * (kCbrt + 1) * (kCbrt + 1) == k { //x.99999...対策
kCbrt += 1
}
var dv: [Int] = [] //約数を入れる、1とkも含む
for i in 1...kSqrt {
if k % i == 0 {
dv.append(i)
if i != k / i {
dv.append(k / i)
}
}
}
dv = dv.sorted(by: <)
let dvCnt = dv.count
var counter = 0
var i = 0
while dv[i] <= kCbrt {
var j = i
while dv[j] <= kSqrt && dv[j] * dv[j] <= k / dv[i] {
if k % (dv[i] * dv[j]) == 0 {
counter += 1
}
j += 1
if j == dvCnt {
break
}
}
i += 1
if i == dvCnt {
break
}
}
print(counter)