# Is it almost-prime?

## Sagemath, 2 bytes

```
GF
```

Outputs via exception.

Try it online!

The Sagemath builtin \$\text{GF}\$ creates a Galois Field of order \$n\$. However, remember that \$\mathbb{F}_n\$ is only a field if \$n = p^k\$ where \$p\$ is a prime and \$k\$ a positive integer. Thus the function throws an exception if and only if its input is not a prime power.

## Python 2, 42 bytes

```
f=lambda n,p=2:n%p and f(n,p+1)or p**n%n<1
```

Try it online!

Since Python doesn't have any built-ins for primes, we make do with checking divisibility.

We find the smallest prime `p`

that's a factor of `n`

by counting up `p=2,3,4,...`

until `n`

is divisible by `p`

, that is `n%p`

is zero. There, we check that this `p`

is the only prime factor by checking that a high power of `p`

is divisible by `n`

. For this, `p**n`

suffices.

As a program:

**43 bytes**

```
n=input()
p=2
while n%p:p+=1
print p**n%n<1
```

Try it online!

This could be shorter with exit codes if those are allowed.

**46 bytes**

```
lambda n:all(n%p for p in range(2,n)if p**n%n)
```

Try it online!

## Shakespeare Programming Language, 329 bytes

```
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]
Ajax:Listen tothy.
Page:You cat.
Scene V:.
Page:You is the sum ofYou a cat.
Is the remainder of the quotient betweenI you nicer zero?If soLet usScene V.
Scene X:.
Page:You is the cube ofYou.Is you worse I?If soLet usScene X.
You is the remainder of the quotient betweenYou I.Open heart
```

Try it online!

Outputs `0`

if the input is almost prime, and a positive integer otherwise. I am not sure this is an acceptable output; changing it would cost a few bytes.

Explanation:

- Scene I:
`Page`

takes in input (call this`n`

). Initialize`Ajax = 1`

. - Scene V: Increment
`Ajax`

until`Ajax`

is a divisor of`Page`

; call the final value`p`

This gives the smallest divisor of`Page`

, which is guaranteed to be a prime. - Scene X: Cube
`Ajax`

until you end up with a power of`p`

, say`p^k`

which is greater than`n`

. Then`n`

is almost-prime iff`n`

divides`p^k`

.