/* rep08.c gcc rep08.c -o rep08 -lm */ #include #include #include #include "crypto060608.h" // crypto060608.h はホームページから download せよ int elementorder(int a, int m) /* mod m での a の乗法位数を返す */ { int x=a,i=1; while(x!=1){ x=modmul(a,x,m); i++; } return i; } int primitiveroot(int p) /* 素数 p を法とする原始根を返す */ { int g=1; while(elementorder(g,p)!=(p-1)) g++; return g; } main() { int a,n,p,g,i,x; printf("mod n の元の乗法位数 ( 素数については原始根も出力 )\n\n"); for(n=3;n<=100;n++){ printf(" n = %2d\n",n); printf(" Euler(n) = %2d\n\n",eulerfunction(n)); for(a=1;a