Irreducible polynomials over GF(5)

13

A polynomial with coefficients in some field F is called irreducible over F if it cannot be decomposed into the product of lower degree polynomials with coefficients in F.

Consider polynomials over the Galois field GF(5). This field contains 5 elements, namely the numbers 0, 1, 2, 3, and 4.

Task

Given a positive integer n, compute the number of irreducible polynomials of degree n over GF(5). These are simply the polynomials with coefficients in 0-4 which cannot be factored into other polynomials with coefficients in 0-4.

Input

Input will be a single integer and can come from any standard source (e.g. STDIN or function arguments). You must support input up to the largest integer such that the output does not overflow.

Output

Print or return the number of polynomials that are irreducible over GF(5). Note that these numbers get large rather quickly.

Examples

In : Out
 1 : 5
 2 : 10
 3 : 40
 4 : 150
 5 : 624
 6 : 2580
 7 : 11160
 8 : 48750
 9 : 217000
10 : 976248
11 : 4438920

Note that these numbers form the sequence A001692 in OEIS.

Alex A.

Posted 2016-01-18T04:23:23.363

Reputation: 23 761

PARI/GP 46 bytes on A001692 ;) Is there a time limit? – ბიმო – 2016-01-18T04:39:42.797

@Bruce_Forte Nope. – Alex A. – 2016-01-18T04:42:35.213

Answers

9

Jelly, 30 23 22 20 bytes

ÆF>1’PḄ
ÆDµU5*×Ç€S:Ṫ

Try it online! or verify all test cases at once.

Algorithm

This uses the formula

formula

from the OEIS page, where d | n indicates that we sum over all divisors d of n, and μ represents the Möbius function.

Code

ÆF>1’PḄ       Monadic helper link. Argument: d
              This link computes the Möbius function of d.

ÆF            Factor d into prime-exponent pairs.
  >1          Compare each prime and exponent with 1. Returns 1 or 0.
    ’         Decrement each Boolean, resulting in 0 or -1.
     P        Take the product of all Booleans, for both primes and exponents.
      Ḅ       Convert from base 2 to integer. This is a sneaky way to map [0, b] to
              b and [] to 0.

ÆDµU5*×Ç€S:Ṫ  Main link. Input: n

ÆD            Compute all divisors of n.
  µ           Begin a new, monadic chain. Argument: divisors of n
   U          Reverse the divisors, effectively computing n/d for each divisor d.
              Compute 5 ** (n/d) for each n/d.

       ǀ     Map the helper link over the (ascending) divisors.
      ×       Multiply the powers by the results from Ç.
         S    Add the resulting products.
          Ṫ   Divide the sum by the last divisor (n).

Dennis

Posted 2016-01-18T04:23:23.363

Reputation: 196 637

1I love these Jelly answers to hard math ! :) – None – 2016-01-19T09:20:44.223

3

Mathematica, 39 38 bytes

DivisorSum[a=#,5^(a/#)MoebiusMu@#/a&]&

Uses the same formula as the Jelly answer.

LegionMammal978

Posted 2016-01-18T04:23:23.363

Reputation: 15 731

+1 for teaching me about the named-function operator, but I think it's a byte shorter without: DivisorSum[n=#,5^(n/#)MoebiusMu@#/n&]& – Martin Ender – 2016-01-19T21:30:26.387

1

Pari/GP, 17 bytes

n->ffnbirred(5,n)

Try it online!


Pari/GP, without built-in, 35 bytes

n->sumdiv(n,d,5^(n/d)*moebius(d)/n)

Try it online!

alephalpha

Posted 2016-01-18T04:23:23.363

Reputation: 23 988