11#
22# primefactors.R
33#
4- # $Revision: 1.14 $ $Date: 2025/01/13 09:01:24 $
4+ # $Revision: 1.16 $ $Date: 2025/01/19 05:11:27 $
55#
66
77# # Table of prime numbers is now in sysdata object 'Spatstat.PrimesTable'
@@ -33,7 +33,8 @@ primefactors <- function(n, method=c("C", "interpreted")) {
3333 check.1.integer(n )
3434 if (n < = 0 ) return (integer(0 ))
3535 method <- match.arg(method )
36- if (method == " C" && n > .Machine $ integer.max )
36+ MaxInt <- .Machine $ integer.max
37+ if (method == " C" && n > MaxInt )
3738 method <- " interpreted"
3839 switch (method ,
3940 interpreted = {
@@ -49,7 +50,8 @@ primefactors <- function(n, method=c("C", "interpreted")) {
4950 # # reduce problem size
5051 primedivisors <- candidateprimes [divides ]
5152 result <- sort(c(result , primedivisors ))
52- n <- as.integer(n / prod(primedivisors ))
53+ n <- n / prod(primedivisors )
54+ if (n < = MaxInt ) n <- as.integer(n )
5355 prmax <- floor(sqrt(n ))
5456 candidateprimes <- primedivisors
5557 }
@@ -133,14 +135,16 @@ divisors <- local({
133135is.square <- function (n ) {
134136 check.1.integer(n )
135137 if (n < 0 ) return (FALSE )
136- tp <- table(primefactors(n ))
137- all(tp %% 2 == 0 )
138+ v <- sqrt(n )
139+ m <- c(floor(v ), ceiling(v ))
140+ any(m ^ 2 == n )
138141}
139142
140143is.cube <- function (n ) {
141144 check.1.integer(n )
142- tp <- table(primefactors(abs(n )))
143- all(tp %% 3 == 0 )
145+ v <- n ^ (1 / 3 )
146+ m <- c(floor(v ), ceiling(v ))
147+ any(m ^ 3 == n )
144148}
145149
146150is.power <- function (n ) {
0 commit comments