@@ -174,7 +174,7 @@ public struct HugeInt : Hashable, Comparable, Codable, CustomStringConvertible {
174174 let this : HugeInt = self
175175 var maximum : HugeInt = maximum
176176 let two : HugeInt = HugeInt ( is_negative: false , [ 2 ] ) , one : HugeInt = HugeInt . one
177- let factors : Set < HugeInt > = await withTaskGroup ( of: HugeInt ? . self, body: { group in
177+ return await withTaskGroup ( of: HugeInt ? . self, body: { group in
178178 while maximum >= two {
179179 let target_number : HugeInt = maximum
180180 group. addTask {
@@ -190,7 +190,6 @@ public struct HugeInt : Hashable, Comparable, Codable, CustomStringConvertible {
190190 }
191191 return array
192192 } )
193- return factors
194193 }
195194 /// - Warning: This function assumes self is less than or equal to the given number.
196195 /// - Warning: Very resource intensive when using big numbers.
@@ -480,22 +479,13 @@ internal extension HugeInt {
480479 static func add( bigger_numbers: [ Int8 ] , smaller_numbers: [ Int8 ] ) -> [ Int8 ] {
481480 let smaller_numbers_length : Int = smaller_numbers. count
482481 let result_count : Int = bigger_numbers. count + 1
483- var result : [ Int8 ] = [ Int8 ] . init ( repeating: 0 , count: result_count)
482+ var result : [ Int8 ] = bigger_numbers
483+ result. append ( 0 )
484484
485- var remainder : Int8 = 0
486485 for index in 0 ..< smaller_numbers_length {
487- var new_value : Int8 = smaller_numbers [ index] + bigger_numbers[ index] + remainder
488- if new_value > 9 {
489- new_value -= 10
490- remainder = 1
491- } else {
492- remainder = 0
493- }
494- result [ index] = new_value
486+ result [ index] += smaller_numbers [ index]
495487 }
496- result [ smaller_numbers_length] = remainder
497- for i in smaller_numbers_length..< result_count- 1 {
498- result [ i] += bigger_numbers [ i]
488+ for i in 0 ..< result_count {
499489 if result [ i] > 9 {
500490 result [ i] -= 10
501491 result [ i+ 1 ] += 1
@@ -539,22 +529,14 @@ internal extension HugeInt {
539529 static func subtract( bigger_numbers: [ Int8 ] , smaller_numbers: [ Int8 ] ) -> [ Int8 ] {
540530 let smaller_numbers_length : Int = smaller_numbers. count
541531 let result_count : Int = bigger_numbers. count
542- var result : [ Int8 ] = [ Int8 ] . init ( repeating : 0 , count : result_count )
532+ var result : [ Int8 ] = bigger_numbers
543533
544534 for index in 0 ..< smaller_numbers_length {
545- result [ index] += bigger_numbers [ index]
546- var value : Int8 = result [ index] - smaller_numbers[ index]
547- if value < 0 {
548- value += 10
549- result [ index+ 1 ] -= 1
550- }
551- result [ index] = value
535+ result [ index] -= smaller_numbers [ index]
552536 }
553- for i in smaller_numbers_length..< result_count {
554- result [ i] += bigger_numbers [ i]
537+ for i in 0 ..< result_count {
555538 if result [ i] < 0 {
556- let value : Int8 = result [ i] + 10
557- result [ i] = value
539+ result [ i] += 10
558540 result [ i+ 1 ] -= 1
559541 }
560542 }
0 commit comments