暗号総崩れ-素数判定が多項式時間で可能
■ このスレッドは過去ログ倉庫に格納されています
0058Rina ◆tI333vNE
NGNGint gcd(int a, int b) {
int c;
while (b != 0) {
c = a % b;
a = b;
b = c;
}
return a;
}
boolean isCanPowerAofB(int n) {
int i;
for (i = 0 ; i < sizeof(int) ; i++) {
if ( ((1 << i) | a) != (1 << i)) {
return false;
}
}
return true;
}
boolean isPrime(int n)
{
int r = a = x = 2;
if (isCanPowerAofB(n) == true) {
return false;
}
while (r < n) {
if (gcd(n,r) != 1) {
return false;
}
if (isPrime(r) == true) {
int q = MaxPrime(r-1);
if (q >= round(4*sqrt(r)*ln(n))
&& (round(pow(n,(r-1)/q)) % r) == 0) { // modの処理あってる?
break;
}
}
r++;
}
for (a = 1 ; a <= round(2*sqrt(r)*ln(n)) ; a++)
if ((round(pow(x-1,n)) % (pow(x,r)-1 ,n)) == 0)
return false;
return true;
}
int getMaxPrime(int n)
{
while(isPrime(n) != true) n--;
return n;
}
■ このスレッドは過去ログ倉庫に格納されています