Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Excel BI’s Excel Challenge #306 — solved in R
Defining the Puzzle
We are getting back to checking numbers properties with ExcelBI. Today we have some numbers to determine if they are Semi Prime. Post with riddle is here.
List all Semi Prime Numbers.
A Semi Prime is a natural number that is the product of exactly two prime numbers
Ex. 314 which can be expressed as product of two prime numbers — 2 and 157
I would add that Semi Prime number has 4 factors: 1, itself and two which are not 1 or itself, but both are prime numbers themselves.
Loading Exercise
Today we are going to load something from Excel file to check. But as I realized there are some really big numbers in data set we need also to use proper libraries.
library(tidyverse) library(readxl) library(gmp)# for very big numbers library(data.table) input = read_excel(“Semi Prime Numbers.xlsx”, range = “A1:A10”) test = read_excel(“Semi Prime Numbers.xlsx”, range = “C1:C5”)
Approach 1: Tidyverse with purrr
is_semiprime = function(n){ factors <- n %>% as.character() %>% as.bigz() %>% factorize() %>% as.vector() check = ifelse(length(factors) == 2, TRUE, FALSE) return(check) } result = input$Numbers %>% keep(~ is_semiprime(.))
Approach 2: Base R
As function is_semiprime would only change form from piping to writing deep in parentheses, I will only adapt second part, calling function for two other approaches:
semiprimes_base <- unlist(lapply(input$Numbers, is_semiprime)) result_base <- input$Numbers[semiprimes_base]
Approach 3: Data.table
dt <- data.table(Numbers = input$Numbers) dt[, IsSemiprime := sapply(Numbers, is_semiprime)] result_dt <- dt[IsSemiprime == TRUE, .(Number)]
Validation
identical(result, test$`Expected Answers`) [1] TRUE identical(result_base, test$`Expected Answers`) [1] TRUE identical(result_base, test$`Expected Answers`) [1] TRUE
Do not hesitate to show your approaches in R or even Python. Comment, share and come back for next puzzles.
Semi Prime Numbers was originally published in Numbers around us on Medium, where people are continuing the conversation by highlighting and responding to this story.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.