/* rep12.c 平方剰余記号を3通りの計算法で計算する  ・定義通り  ・Euler の規準  ・Jacobi 記号 gcc rep12.c -lm */ #include #include #include #include"crypto050706.h" // crypto050706.h をインクルードして用いよ // Euler の規準 int eulercriterion(int i, int p) { int e=powermod(i,(p-1)/2,p); // 平方剰余記号 = i^((p-1)/2) mod p return e>1 ? e-p : e; // p-1 は -1 に読み替える } main() { int p; // 素数の法 int r[65536]; // mod p での平方根を格納する配列 int q,e,j,i,h,x; p=3; while(1){ if(primeq(p)){ // 定義通りの計算 // r[i] には初期値として -1 を登録しておき、 // x = 1,...,(p-1)/2 について // i = x^2 mod p となるとき r[i] = x に書き換える h=(p-1)/2; for(i=1;i