ðŸš€ Get 25% off access to all my premium courses - use discount code FUNCMAIN at checkout - view the pricing page now!

# Challenge 22 - Largest Pandigital Prime

Problem Attribution - This challenge was inspired by Problem 41 on Project Euler

ðŸ‘‹ Welcome Gophers! In this challenge, you are tasked with implementing the `LargestPandigitalPrime` function which will return the largest possible pandigital prime number.

## Pandigital Primes

An n-digit number is pandigital if it makes use of all the digits `1 to n` exactly ones.

``````pandigital := LargestPandigitalPrime() // returns largest pandigital prime
``````
View Solution
``````package main

import (
"fmt"
"math"
"strconv"
)

func notPrime(n int) bool {
if n&2 == 2 {
return false
}
if (n-1)%6 == 0 {
return false
}
if (n+1)%6 == 0 {
return false
}
return true
}

func isPrime(n int) bool {
if notPrime(n) {
return false
}
max := int(math.Ceil(math.Sqrt(float64(n))))
for i := int(3); i < max; i += 2 {
if n%i == 0 {
return false
}
}
return true
}

func atoi(s string) int {
n, _ := strconv.Atoi(s)
return n
}

func permute(s string) []string {
if len(s) == 1 {
return []string{s}
}

perms := []string{}
tail := s[1:]

for _, perm := range permute(tail) {
for i := 0; i < len(s); i++ {
newperm := perm[:i] + head + perm[i:]
perms = append(perms, newperm)
}
}
return perms
}

func LargestPandigitalPrime() int {
max := 0
digits := "7654321"
for i := 0; i < len(digits); i++ {
for _, perm := range permute(digits[i:]) {
i := atoi(perm)
if isPrime(i) {
if i > max {
max = i
}
}
}
if max > 0 {
break
}
}
return max
}

func main() {
fmt.Println("Pandigital Primes")

pandigitalPrime := LargestPandigitalPrime()
fmt.Println(pandigitalPrime)
}
``````