change(generatePrimesCPU): Now aborting at half of candidate
Numbers larger than the half of a number are not able to divide a number
This commit is contained in:
parent
8325cddef8
commit
ac1a8b7039
6
main.go
6
main.go
@ -33,12 +33,18 @@ func printProgress(progress <-chan float32, message string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func checkIsDivisibleByPrime(number int64, offset, stride int, primes *[]int64, resultChannel chan bool, ctx context.Context) {
|
func checkIsDivisibleByPrime(number int64, offset, stride int, primes *[]int64, resultChannel chan bool, ctx context.Context) {
|
||||||
|
threshold := number / 2
|
||||||
for i := offset; i < len(*primes); i += stride {
|
for i := offset; i < len(*primes); i += stride {
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
resultChannel <- false
|
resultChannel <- false
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
|
// no need to continue checking if number is greater than half our number, division is already impossible
|
||||||
|
if (*primes)[i] > threshold {
|
||||||
|
resultChannel <- false
|
||||||
|
return
|
||||||
|
}
|
||||||
// only have to check primes, because all other numbers are multiple of primes.
|
// only have to check primes, because all other numbers are multiple of primes.
|
||||||
// if a number is divisible by a multiple of a prime, it is by definition also divisible by the prime itself.
|
// if a number is divisible by a multiple of a prime, it is by definition also divisible by the prime itself.
|
||||||
if number % (*primes)[i] == 0 {
|
if number % (*primes)[i] == 0 {
|
||||||
|
Loading…
Reference in New Issue
Block a user