We present C++ software for a program which generates a primitive polynomial of degree n modulo p. You can optionally find all primitive polynomials.
A sample run from the command line:
$ pp 13 10
Primpoly Version 5.3 - A Program for Computing Primitive Polynomials. Copyright (C) 1999-2008 by Sean Erik O'Connor. All Rights Reserved. Primpoly comes with ABSOLUTELY NO WARRANTY; for details see the GNU General Public License. This is free software, and you are welcome to redistribute it under certain conditions; see the GNU General Public License for details.
Primitive polynomial modulo 13 of degree 10
x ^ 10 + 2 x ^ 2 + 2 x + 2
The C++ version seems to be working now. I'm currently debugging it more thoroughly and optimizing it for speed. The C version below is stable.
Source code and executables are distributed under the terms of the GNU General Public License Current version is 8.0
I have an in-depth explanation of the software design of this program and the theory behind the algorithms used. See also the examples and test cases. to verify if the program is working correctly.
| Click on the
|
|
|
|
Main program. |
|
|
Header file containing parameters and constants. |
|
|
Modulo p integer arithmetic. |
|
|
Modulo p integer arithmetic class. |
|
|
Factoring into primes and primality testing. |
|
|
Factoring into primes and primality testing class. |
|
|
Polynomial I/O. I took the liberty of using my own LALR(1) parser generator on a simple polynomial grammar to automatically generate the parser. Here is the grammar and its LALR(1) parse tables. The C++ LR parser isn't hard to implement using STL vectors and the automatically generated parse tables above. |
|
|
Polynomial I/O. |
|
|
Polynomial arithmetic. |
|
|
Polynomial arithmetic class. |
|
|
Multiple precision integer arithmetic. |
|
|
Multiple precision integer arithmetic class. |
|
|
Unit test function for all the classes and their member functions. Runs always and prints to a log file. |
|
|
Makefile for Unix systems and Windows systems running Cygwin. |
It does have limits on the size of p and n since it uses integer arithmetic. See the documentation for more details. For p=2 we can go as high as n=62.
Source code and executables are distributed under the terms of the GNU General Public License Current version is 5.3
| Click on the
|
|
|
|
This is the main program. |
|
|
This is the header file containing parameters and constants. |
|
|
High level helper functions. |
|
|
Modulo p integer arithmetic, primitive root testing. |
|
|
Factoring into primes and primality testing. |
|
|
Polynomial I/O. |
|
|
Polynomial arithmetic. |
|
|
Polynomial order testing. |
|
|
Makefile for Unix systems and Windows systems running Cygwin. |
On Mac OS X, I also use the Xcode IDE. On a Windows XP PC system, I use the GNU Cygwin toolset for command line compiling and debugging. On Unix systems, including Mac OS X, I use the built-in gcc compiler and gdb debugger. For details on the C++ language, see Bjarne Stroustrup's Page and C++ FAQ Lite and the Standard Template Library.
Copyright © 1986-2008 by Sean Erik O'Connor. All Rights Reserved. last updated 12 May 08.