Words
Words and Bits.swift:90struct Words
struct Words
import BigInt
struct BigUInt
An arbitary precision unsigned integer type, also known as a “big integer”.
init()
Initializes a new BigUInt with value 0.
init(_ data: Data)
Initializes an integer from the bits stored inside a piece of Data
. The data is assumed to be in network (big-endian) byte order.
init(_ buffer: UnsafeRawBufferPointer)
Initialize a BigInt from bytes accessed from an UnsafeRawBufferPointer
init<T>(_ source: T) where T : BinaryFloatingPoint
init<T>(_ source: T) where T : BinaryInteger
init?<S>(_ text: S, radix: Int = 10) where S : StringProtocol
Initialize a big integer from an ASCII representation in a given radix. Numerals above 9
are represented by letters from the English alphabet.
init<T>(clamping source: T) where T : BinaryInteger
init?(exactly source: Decimal)
init?<T>(exactly source: T) where T : BinaryFloatingPoint
init?<T>(exactly source: T) where T : BinaryInteger
init(extendedGraphemeClusterLiteral value: String)
Initialize a new big integer from an extended grapheme cluster. The cluster must consist of a decimal digit.
init(from decoder: Decoder) throws
init(integerLiteral value: UInt64)
Initialize a new big integer from an integer literal.
init(stringLiteral value: StringLiteralType)
Initialize a new big integer from a decimal number represented by a string literal of arbitrary length. The string must contain only decimal digits.
init?(truncating source: Decimal)
init<T>(truncatingIfNeeded source: T) where T : BinaryInteger
init(unicodeScalarLiteral value: UnicodeScalar)
Initialize a new big integer from a Unicode scalar. The scalar must represent a decimal digit.
init(words: [Word])
Initializes a new BigUInt with the specified digits. The digits are ordered from least to most significant.
init<Words>(words: Words) where Words : Sequence, Words.Element == UInt
static let directMultiplicationLimit: Int
Multiplication switches to an asymptotically better recursive algorithm when arguments have more words than this limit.
static var isSigned: Bool { get }
static func compare(_ a: BigUInt, _ b: BigUInt) -> ComparisonResult
Compare a
to b
and return an NSComparisonResult
indicating their order.
static func randomInteger(lessThan limit: BigUInt) -> BigUInt
Create a uniformly distributed random unsigned integer that’s less than the specified limit.
static func randomInteger<RNG>(lessThan limit: BigUInt, using generator: inout RNG) -> BigUInt where RNG : RandomNumberGenerator
Create a uniformly distributed random unsigned integer that’s less than the specified limit.
static func randomInteger(withExactWidth width: Int) -> BigUInt
Create a big unsigned integer consisting of width-1
uniformly distributed random bits followed by a one bit.
static func randomInteger<RNG>(withExactWidth width: Int, using generator: inout RNG) -> BigUInt where RNG : RandomNumberGenerator
Create a big unsigned integer consisting of width-1
uniformly distributed random bits followed by a one bit.
static func randomInteger(withMaximumWidth width: Int) -> BigUInt
Create a big unsigned integer consisting of width
uniformly distributed random bits.
static func randomInteger<RNG>(withMaximumWidth width: Int, using generator: inout RNG) -> BigUInt where RNG : RandomNumberGenerator
Create a big unsigned integer consisting of width
uniformly distributed random bits.
var bitWidth: Int { get }
The minimum number of bits required to represent this integer in binary.
var debugDescription: String { get }
Return the decimal representation of this integer.
var description: String { get }
Return the decimal representation of this integer.
var isZero: Bool { get }
Return true iff this integer is zero.
var leadingZeroBitCount: Int { get }
The number of leading zero bits in the binary representation of this integer in base 2^(Word.bitWidth)
. This is useful when you need to normalize a BigUInt
such that the top bit of its most significant word is 1.
var playgroundDescription: Any { get }
Return the playground quick look representation of this integer.
var trailingZeroBitCount: Int { get }
The number of trailing zero bits in the binary representation of this integer.
var words: Words { get }
subscript(bitAt index: Int) -> Bool { get set }
static func % (x: BigUInt, y: BigUInt) -> BigUInt
Divide x
by y
and return the remainder.
static func %= (x: inout BigUInt, y: BigUInt)
Divide x
by y
and store the remainder in x
.
static func &= (a: inout BigUInt, b: BigUInt)
Calculate the bitwise AND of a
and b
and return the result.
static func * (x: BigUInt, y: BigUInt) -> BigUInt
Multiply a
by b
and return the result.
static func *= (a: inout BigUInt, b: BigUInt)
Multiply a
by b
and store the result in a
.
static func + (a: BigUInt, b: BigUInt) -> BigUInt
Add a
and b
together and return the result.
static func += (a: inout BigUInt, b: BigUInt)
Add a
and b
together, and store the sum in a
.
static func - (a: BigUInt, b: BigUInt) -> BigUInt
Subtract b
from a
and return the result.
static func -= (a: inout BigUInt, b: BigUInt)
Subtract b
from a
and store the result in a
.
static func / (x: BigUInt, y: BigUInt) -> BigUInt
Divide x
by y
and return the quotient.
static func /= (x: inout BigUInt, y: BigUInt)
Divide x
by y
and store the quotient in x
.
static func < (a: BigUInt, b: BigUInt) -> Bool
Return true iff a
is less than b
.
static func << <Other>(lhs: BigUInt, rhs: Other) -> BigUInt where Other : BinaryInteger
static func <<= <Other>(lhs: inout BigUInt, rhs: Other) where Other : BinaryInteger
static func == (a: BigUInt, b: BigUInt) -> Bool
Return true iff a
is equal to b
.
static func >> <Other>(lhs: BigUInt, rhs: Other) -> BigUInt where Other : BinaryInteger
static func >>= <Other>(lhs: inout BigUInt, rhs: Other) where Other : BinaryInteger
static func ^= (a: inout BigUInt, b: BigUInt)
Calculate the bitwise XOR of a
and b
and return the result.
static func |= (a: inout BigUInt, b: BigUInt)
Calculate the bitwise OR of a
and b
, and store the result in a
.
static func ~ (a: BigUInt) -> BigUInt
Return the ones’ complement of a
.
func advanced(by n: BigInt) -> BigUInt
Adds n
to self
and returns the result. Traps if the result would be less than zero.
mutating func decrement(shiftedBy shift: Int = 0)
Decrement this integer by one.
func distance(to other: BigUInt) -> BigInt
Returns the (potentially negative) difference between self
and other
as a BigInt
. Never traps.
func encode(to encoder: Encoder) throws
func greatestCommonDivisor(with b: BigUInt) -> BigUInt
Returns the greatest common divisor of self
and b
.
func hash(into hasher: inout Hasher)
Append this BigUInt
to the specified hasher.
func inverse(_ modulus: BigUInt) -> BigUInt?
Returns the multiplicative inverse of this integer in modulo modulus
arithmetic, or nil
if there is no such number.
func isPrime(rounds: Int = 10) -> Bool
Returns true if this integer is probably prime. Returns false if this integer is definitely not prime.
func isStrongProbablePrime(_ base: BigUInt) -> Bool
Returns true iff this integer passes the strong probable prime test for the specified base.
func multiplied(by y: BigUInt) -> BigUInt
Multiply this integer by y
and return the result.
func multiplied(byWord y: Word) -> BigUInt
Multiply this big integer by a single Word, and return the result.
mutating func multiply(byWord y: Word)
Multiply this big integer by a single word, and store the result in place of the original big integer.
mutating func multiplyAndAdd(_ x: BigUInt, _ y: Word, shiftedBy shift: Int = 0)
Multiply x
by y
, and add the result to this integer, optionally shifted shift
words to the left.
func power(_ exponent: Int) -> BigUInt
Returns this integer raised to the power exponent
.
func power(_ exponent: BigUInt, modulus: BigUInt) -> BigUInt
Returns the remainder of this integer raised to the power exponent
in modulo arithmetic under modulus
.
func quotientAndRemainder(dividingBy y: BigUInt) -> (quotient: BigUInt, remainder: BigUInt)
Divide this integer by y
and return the resulting quotient and remainder.
func serialize() -> Data
Return a Data
value that contains the base-256 representation of this integer, in network (big-endian) byte order.
func serializeToBuffer() -> UnsafeRawBufferPointer
Return a UnsafeRawBufferPointer
buffer that contains the base-256 representation of this integer, in network (big-endian) byte order.
func signum() -> BigUInt
Returns 1
if this value is, positive; otherwise, 0
.
func squareRoot() -> BigUInt
Returns the integer square root of a big integer; i.e., the largest integer whose square isn’t greater than value
.
mutating func subtract(_ other: BigUInt, shiftedBy shift: Int = 0)
Subtract other
from this integer in place. other
is shifted shift
digits to the left before being subtracted.
mutating func subtractReportingOverflow(_ b: BigUInt, shiftedBy shift: Int = 0) -> Bool
Subtract other
from this integer in place, and return a flag indicating if the operation caused an arithmetic overflow. other
is shifted shift
digits to the left before being subtracted.
func subtracting(_ other: BigUInt, shiftedBy shift: Int = 0) -> BigUInt
Subtract b
from this integer, and return the difference. b
is shifted shift
digits to the left before being subtracted.
func subtractingReportingOverflow(_ other: BigUInt) -> (partialValue: BigUInt, overflow: Bool)
Subtracts other
from self
, returning the result and a flag indicating arithmetic overflow.
func subtractingReportingOverflow(_ other: BigUInt, shiftedBy shift: Int) -> (partialValue: BigUInt, overflow: Bool)
Subtract other
from this integer, returning the difference and a flag indicating arithmetic overflow. other
is shifted shift
digits to the left before being subtracted.
typealias Stride = BigInt
A type that can represent the distance between two values ofa BigUInt
.
typealias Word = UInt
The type representing a digit in BigUInt
’s underlying number system.
protocol BidirectionalCollection<Element> : Collection where Self.Indices : BidirectionalCollection, Self.SubSequence : BidirectionalCollection
A collection that supports backward as well as forward traversal.
protocol Collection<Element> : Sequence
A sequence whose elements can be traversed multiple times, nondestructively, and accessed by an indexed subscript.
protocol RandomAccessCollection<Element> : BidirectionalCollection where Self.Indices : RandomAccessCollection, Self.SubSequence : RandomAccessCollection
A collection that supports efficient random-access index traversal.
protocol Sequence<Element>
A type that provides sequential, iterated access to its elements.
var endIndex: Int { get }
var startIndex: Int { get }
subscript(index: Int) -> Word { get }
var count: Int { get }
The number of elements in the collection.
var first: Self.Element? { get }
The first element of the collection.
var isEmpty: Bool { get }
A Boolean value indicating whether the collection is empty.
var last: Self.Element? { get }
The last element of the collection.
var lazy: LazySequence<Self> { get }
A sequence containing the same elements as this sequence, but on which some operations, such as map
and filter
, are implemented lazily.
var underestimatedCount: Int { get }
A value less than or equal to the number of elements in the collection.
func allSatisfy(_ predicate: (Self.Element) throws -> Bool) rethrows -> Bool
Returns a Boolean value indicating whether every element of a sequence satisfies a given predicate.
func compactMap<ElementOfResult>(_ transform: (Self.Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]
Returns an array containing the non-nil
results of calling the given transformation with each element of this sequence.
func compare<Comparator>(_ lhs: Comparator.Compared, _ rhs: Comparator.Compared) -> ComparisonResult where Comparator : SortComparator, Comparator == Self.Element
If lhs
is ordered before rhs
in the ordering described by the given sequence of SortComparator
s
func contains(_ element: Self.Element) -> Bool
Returns a Boolean value indicating whether the sequence contains the given element.
func contains(where predicate: (Self.Element) throws -> Bool) rethrows -> Bool
Returns a Boolean value indicating whether the sequence contains an element that satisfies the given predicate.
func count<E>(where predicate: (Self.Element) throws(E) -> Bool) throws(E) -> Int where E : Error
Returns the number of elements in the sequence that satisfy the given predicate.
func difference<C>(from other: C) -> CollectionDifference<Self.Element> where C : BidirectionalCollection, Self.Element == C.Element
Returns the difference needed to produce this collection’s ordered elements from the given collection.
func difference<C>(from other: C, by areEquivalent: (C.Element, Self.Element) -> Bool) -> CollectionDifference<Self.Element> where C : BidirectionalCollection, Self.Element == C.Element
Returns the difference needed to produce this collection’s ordered elements from the given collection, using the given predicate as an equivalence test.
func drop(while predicate: (Self.Element) throws -> Bool) rethrows -> Self.SubSequence
Returns a subsequence by skipping elements while predicate
returns true
and returning the remaining elements.
func dropFirst(_ k: Int = 1) -> Self.SubSequence
Returns a subsequence containing all but the given number of initial elements.
func dropLast(_ k: Int) -> Self.SubSequence
Returns a subsequence containing all but the specified number of final elements.
func elementsEqual<OtherSequence>(_ other: OtherSequence) -> Bool where OtherSequence : Sequence, Self.Element == OtherSequence.Element
Returns a Boolean value indicating whether this sequence and another sequence contain the same elements in the same order.
func elementsEqual<OtherSequence>(_ other: OtherSequence, by areEquivalent: (Self.Element, OtherSequence.Element) throws -> Bool) rethrows -> Bool where OtherSequence : Sequence
Returns a Boolean value indicating whether this sequence and another sequence contain equivalent elements in the same order, using the given predicate as the equivalence test.
func enumerated() -> EnumeratedSequence<Self>
Returns a sequence of pairs (n, x), where n represents a consecutive integer starting at zero and x represents an element of the sequence.
func filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> [Self.Element]
Returns an array containing, in order, the elements of the sequence that satisfy the given predicate.
func filter(_ predicate: Predicate<Self.Element>) throws -> [Self.Element]
func first(where predicate: (Self.Element) throws -> Bool) rethrows -> Self.Element?
Returns the first element of the sequence that satisfies the given predicate.
func firstIndex(of element: Self.Element) -> Self.Index?
Returns the first index where the specified value appears in the collection.
func firstIndex(where predicate: (Self.Element) throws -> Bool) rethrows -> Self.Index?
Returns the first index in which an element of the collection satisfies the given predicate.
func firstRange<C>(of other: C) -> Range<Self.Index>? where C : Collection, Self.Element == C.Element
Finds and returns the range of the first occurrence of a given collection within this collection.
func firstRange<C>(of other: C) -> Range<Self.Index>? where C : Collection, Self.Element == C.Element
Finds and returns the range of the first occurrence of a given collection within this collection.
func flatMap<SegmentOfResult>(_ transform: (Self.Element) throws -> SegmentOfResult) rethrows -> [SegmentOfResult.Element] where SegmentOfResult : Sequence
Returns an array containing the concatenated results of calling the given transformation with each element of this sequence.
func forEach(_ body: (Self.Element) throws -> Void) rethrows
Calls the given closure on each element in the sequence in the same order as a for
-in
loop.
func formIndex(_ i: inout Self.Index, offsetBy distance: Int)
Offsets the given index by the specified distance.
func formIndex(_ i: inout Self.Index, offsetBy distance: Int, limitedBy limit: Self.Index) -> Bool
Offsets the given index by the specified distance, or so that it equals the given limiting index.
func formIndex(after i: inout Self.Index)
Replaces the given index with its successor.
func formIndex(before i: inout Self.Index)
func formatted<S>(_ style: S) -> S.FormatOutput where Self == S.FormatInput, S : FormatStyle
func index(_ i: Self.Index, offsetBy distance: Int, limitedBy limit: Self.Index) -> Self.Index?
Returns an index that is the specified distance from the given index, unless that distance is beyond a given limiting index.
func indices(of element: Self.Element) -> RangeSet<Self.Index>
Returns the indices of all the elements that are equal to the given element.
func indices(where predicate: (Self.Element) throws -> Bool) rethrows -> RangeSet<Self.Index>
Returns the indices of all the elements that match the given predicate.
func last(where predicate: (Self.Element) throws -> Bool) rethrows -> Self.Element?
Returns the last element of the sequence that satisfies the given predicate.
func lastIndex(of element: Self.Element) -> Self.Index?
Returns the last index where the specified value appears in the collection.
func lastIndex(where predicate: (Self.Element) throws -> Bool) rethrows -> Self.Index?
Returns the index of the last element in the collection that matches the given predicate.
func lexicographicallyPrecedes<OtherSequence>(_ other: OtherSequence) -> Bool where OtherSequence : Sequence, Self.Element == OtherSequence.Element
Returns a Boolean value indicating whether the sequence precedes another sequence in a lexicographical (dictionary) ordering, using the less-than operator (<
) to compare elements.
func lexicographicallyPrecedes<OtherSequence>(_ other: OtherSequence, by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows -> Bool where OtherSequence : Sequence, Self.Element == OtherSequence.Element
Returns a Boolean value indicating whether the sequence precedes another sequence in a lexicographical (dictionary) ordering, using the given predicate to compare elements.
func makeIterator() -> IndexingIterator<Self>
Returns an iterator over the elements of the collection.
func map<T, E>(_ transform: (Self.Element) throws(E) -> T) throws(E) -> [T] where E : Error
Returns an array containing the results of mapping the given closure over the sequence’s elements.
func map<T, E>(_ transform: (Self.Element) throws(E) -> T) throws(E) -> [T] where E : Error
Returns an array containing the results of mapping the given closure over the sequence’s elements.
@warn_unqualified_access func max() -> Self.Element?
Returns the maximum element in the sequence.
@warn_unqualified_access func max(by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows -> Self.Element?
Returns the maximum element in the sequence, using the given predicate as the comparison between elements.
@warn_unqualified_access func min() -> Self.Element?
Returns the minimum element in the sequence.
@warn_unqualified_access func min(by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows -> Self.Element?
Returns the minimum element in the sequence, using the given predicate as the comparison between elements.
func prefix(_ maxLength: Int) -> Self.SubSequence
Returns a subsequence, up to the specified maximum length, containing the initial elements of the collection.
func prefix(through position: Self.Index) -> Self.SubSequence
Returns a subsequence from the start of the collection through the specified position.
func prefix(upTo end: Self.Index) -> Self.SubSequence
Returns a subsequence from the start of the collection up to, but not including, the specified position.
func prefix(while predicate: (Self.Element) throws -> Bool) rethrows -> Self.SubSequence
Returns a subsequence containing the initial elements until predicate
returns false
and skipping the remaining elements.
func randomElement() -> Self.Element?
Returns a random element of the collection.
func randomElement<T>(using generator: inout T) -> Self.Element? where T : RandomNumberGenerator
Returns a random element of the collection, using the given generator as a source for randomness.
func ranges<C>(of other: C) -> [Range<Self.Index>] where C : Collection, Self.Element == C.Element
Finds and returns the ranges of the all occurrences of a given sequence within the collection.
func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Self.Element) throws -> Result) rethrows -> Result
Returns the result of combining the elements of the sequence using the given closure.
func reduce<Result>(into initialResult: Result, _ updateAccumulatingResult: (inout Result, Self.Element) throws -> ()) rethrows -> Result
Returns the result of combining the elements of the sequence using the given closure.
func removingSubranges(_ subranges: RangeSet<Self.Index>) -> DiscontiguousSlice<Self>
Returns a collection of the elements in this collection that are not represented by the given range set.
func reversed() -> ReversedCollection<Self>
Returns a view presenting the elements of the collection in reverse order.
func shuffled() -> [Self.Element]
Returns the elements of the sequence, shuffled.
func shuffled<T>(using generator: inout T) -> [Self.Element] where T : RandomNumberGenerator
Returns the elements of the sequence, shuffled using the given generator as a source for randomness.
func sorted() -> [Self.Element]
Returns the elements of the sequence, sorted.
func sorted(by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows -> [Self.Element]
Returns the elements of the sequence, sorted using the given predicate as the comparison between elements.
func sorted<Comparator>(using comparator: Comparator) -> [Self.Element] where Comparator : SortComparator, Self.Element == Comparator.Compared
Returns the elements of the sequence, sorted using the given comparator to compare elements.
func sorted<S, Comparator>(using comparators: S) -> [Self.Element] where S : Sequence, Comparator : SortComparator, Comparator == S.Element, Self.Element == Comparator.Compared
Returns the elements of the sequence, sorted using the given array of SortComparator
s to compare elements.
func split(maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true, whereSeparator isSeparator: (Self.Element) throws -> Bool) rethrows -> [Self.SubSequence]
Returns the longest possible subsequences of the collection, in order, that don’t contain elements satisfying the given predicate.
func split(separator: Self.Element, maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true) -> [Self.SubSequence]
Returns the longest possible subsequences of the collection, in order, around elements equal to the given element.
func starts<PossiblePrefix>(with possiblePrefix: PossiblePrefix) -> Bool where PossiblePrefix : Sequence, Self.Element == PossiblePrefix.Element
Returns a Boolean value indicating whether the initial elements of the sequence are the same as the elements in another sequence.
func starts<PossiblePrefix>(with possiblePrefix: PossiblePrefix, by areEquivalent: (Self.Element, PossiblePrefix.Element) throws -> Bool) rethrows -> Bool where PossiblePrefix : Sequence
Returns a Boolean value indicating whether the initial elements of the sequence are equivalent to the elements in another sequence, using the given predicate as the equivalence test.
func suffix(_ maxLength: Int) -> Self.SubSequence
Returns a subsequence, up to the given maximum length, containing the final elements of the collection.
func suffix(from start: Self.Index) -> Self.SubSequence
Returns a subsequence from the specified position to the end of the collection.
func trimmingPrefix<Prefix>(_ prefix: Prefix) -> Self.SubSequence where Prefix : Sequence, Self.Element == Prefix.Element
Returns a new collection of the same type by removing prefix
from the start of the collection.
func trimmingPrefix(while predicate: (Self.Element) throws -> Bool) rethrows -> Self.SubSequence
func withContiguousStorageIfAvailable<R>(_ body: (UnsafeBufferPointer<Self.Element>) throws -> R) rethrows -> R?
func flatMap<ElementOfResult>(_ transform: (Self.Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]
func index(of element: Self.Element) -> Self.Index?
Returns the first index where the specified value appears in the collection.