ウィルソンの定理を浅く語る


ウィルソンの定理定義
初等数論では,ウィルソン定理は自然数が素数であるか否かを判定する十分な必要条件を与えた.すなわち、pが素数である場合:(p-1)!≡−1(mod p)であるが,階乗は爆発的に増加するため,その結論は実際の操作にはあまり意味がないが,計算機の演算能力を借りて広く応用され,数学的導出を支援することもできる.
ウィルソンの定理を証明する
十分性「p」が素数でなければ、p=4の場合、明らかに(p-1)!≡6≡2(mod p)、p>4の場合、pが完全な平方数でなければ、ab=pとなる2つの不等な因数aが存在し、bがab=pとなると(p-1)!≡nab≡0(mod p)、pが完全な平方数であるp=k 2であれば、p>4であるため、k>2,k,2 k≡0(mod p).必要性pが素数であれば、集合A={1,2,3,...p-1}をとる;Aは型p乗算の縮系、すなわち任意のi∈Aを構成し、j∈Aが存在するので、(i j)≡1(mod p)では、A中の元素はちょうど2対になっているのではないか.必ずしもそうではないが、この場合x^2≡1(mod p)を考慮するだけで、x≡1(mod p)またはx≡p-1(mod p)の残りの2対になる.したがって(p-1)!≡1*(p-1)≡1(mod p)
コード証明
import java.math.BigInteger;
import java.util.Scanner;
public class WilsonTheorem {
public static void main(String[] args) {
System.out.println("       :");
Scanner in = new Scanner(System.in);
int p;
while (true) {
try {
p = in.nextInt();
if (!judge(p))
throw new Exception();
BigInteger factorial = new BigInteger("1");
for(int i = 2; i < p; i++) {
factorial = factorial.multiply(new BigInteger(i + ""));
}
factorial = factorial.add(new BigInteger("1"));
System.out.println("(p-1)! + 1 = " + factorial);
BigInteger result = factorial.divide(new BigInteger(p + ""));
System.out.println("(p-1)! + 1  p = " + result);
} catch (Exception e) {
System.out.println("    ,     !");
continue;
}
}
}
/**
*             
*
* @param num
* @return
*/
public static boolean judge(int num) {
int i;
for (i = 2; i <= num / 2; i++) {
if (num % i == 0)
break;
}
return i > num / 2 ? true : false;
}
}