##----------------------------------------------------------------------
## sieve7.F77.18.R
## Sieve of Eratosthenes search for primes.
## Calculate prime numbers up to 100 million.
## Calls a Fortran routine in a .so shared object file
## 18/04/2020
##----------------------------------------------------------------------
sink('sieve7.F77.18.out')
rm(list=objects())
gc()
if( !is.loaded(symbol = 'findp5') ) {
dyn.load('ACRO.so')
}
kMAX <- as.integer(1.e8)
kprimes <- rep(0L, kMAX)
kkmax <- 0L
ifail <- 0L
memory.size()
for( jloop in 1:7 ) {
if( exists('list2') ) {
rm(list2)
gc()
}
if( jloop==1 ) {
kMAX <- 100L
kFAC <- c(2, 3, 5, 7) ## primes 0 to 10, as before
NKFAC <- length(kFAC)
} else {
kMAX <- as.integer(10*kMAX)
}
nprimes <- 0L
print(system.time(
list2 <- .Fortran('findp5',
nkfac=as.integer(NKFAC), kfac=as.integer(kFAC),
kmax=as.integer(kMAX),
kprimes=as.integer(kprimes), nprimes=as.integer(nprimes),
kkmax=as.integer(kkmax), ifail=as.integer(ifail))
))
print(list2$nprimes) ## the number of primes found
print(list2$kkmax)
nprimes <- list2$nprimes
if( jloop <= 3 ) { ## too many to show beyond this point!
print(list2$kprimes[1:nprimes])
}
kFAC <- list2$kprimes[1:nprimes] ## for the next try
NKFAC <- nprimes
print(memory.size())
}
sink()