##---------------------------------------------------------------------- ## 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()