// Arup Guha
// 10/21/2020
// Shows each base a (1 to p-1) raised to each power mod p,
// where p is a prime # entered by the user.

#include <stdio.h>

int main(void) {

    // Get prime.
    int prime;
    printf("Please enter a prime #\n");
    scanf("%d", &prime);

    // Column headings.
    printf("p  ");
    for (int pow=1; pow<prime;pow++)
        printf("%4d", pow);
    printf("\n");
    for (int i=0; i<80; i++)
        printf("-");
    printf("\n");

    // a represents my base.
    for (int a=1; a<prime; a++) {

        // Row header
        printf("%d| ", a);

        // Print the row, just multiply by a over and over again and mod.
        int res = 1;
        for (int exp=1; exp<prime; exp++) {
            res = (res*a)%prime;
            printf("%4d", res);
        }
        printf("\n");
    }
    return 0;
}
