Skip to content

24-7 Today

Menu
  • Home
  • Ads Guide
  • Blogging
  • Sec Tips
  • SEO Strategies
Menu

Project Euler 35: Circular Primes below One Million

Posted on June 12, 2025 by 24-7

This code reuses the function that strips all digits for a number, presented in Euler Problem 30. The solution for this problem also use the is.prime function to test whether a number is a prime, developed for Euler Problem 7.

The following auxiliary functions help to solve the problem:

  • esieve: Generate primes
  • is_prime: Checks whether a number is prime
  • rotate_left: Rotates the a number

  # Sieve of Eratosthenes
  esieve <- function(x) {
    if (x == 1) return(NULL)
    if (x == 2) return(n)
    l <- 2:x
    i <- 1
    p <- 2
    while (p^2 <= x) {
      l <- l[l == p | l %% p!= 0]
      i <- i + 1
      p <- l[i]
    }
    return(l)
  }

  ## Check if a number is prime
  is_prime <- function(x) {
    if (x <= 1) return(FALSE)
    if (x == 2 | x == 3) return(TRUE)
    primes <- esieve(ceiling(sqrt(x)))
    return(all(x %% primes != 0))
  }

  ## Rotate a number to the left
  rotate_left <- function(x) {
    if (x <= 9) return(x)
    i <- 1
    y <- vector()
    while(x >= 1) {
      d <- x %% 10
      y[i] <- d
      i <- i + 1
      x = x %/% 10
    }
    as.numeric(paste(y[c((length(y) - 1):1, length(y))], collapse = ""))
  }

  ## Check circularity
  is_circular_prime <- function(x) {
    n <- trunc(log10(x)) + 1
    p <- vector(length = n)
    for (r in 1:n) {
      p[r] <- is_prime(x)
      x <- rotate_left(x)
    }
    all(p)
  }

  primes <- esieve(1E6)
  length(which(sapply(primes, is_circular_prime)))

The main program runs through each of the 78,498 primes below one million, saves their digits in a vector and then cycles the numbers to test for primality of each rotation.

Related

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

©2025 24-7 Today | Design: WordPress | Design: Facts