もう書き込めないっぽ…行数が….
int 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;
}