long_division <- function(p,q) { # fraction p / q output <- NULL if(q == 0) return(FALSE) # division by zero! if(p == 0) return("0") r<-p if(p0) output <- paste(output, ".", sep="") else return(output) } # count prime factors cpf <- function(a,b) { c <- 0 while(a%%b==0) {a <- a %/% b; c <- c + 1} return(c) } # greatest common divisor gcd <- function(a,b) ifelse (b==0, a, gcd(b, a %% b)) d<-q %/% gcd(p,q) len_aperiodic <- max(cpf(d,2), cpf(d,5)) if(len_aperiodic>0) for(i in 1:len_aperiodic) { output <- paste(output, r %/% q, sep="") r <- 10*(r %% q) } remainder <- r if(r>0) output <- paste(output, "p", sep="") else return(output) while(TRUE) { output <- paste(output, r %/% q, sep="") r <- 10*(r %% q) if(r == remainder) break } return(output) }