Witajcie
napisalam program w C. Niestety okazuje sie, ze zakres int jest zbyt maly, aby uzyskac interesujace mnie duze liczby, postanowilam wiec wykorzystac magiczny typ BigInteger. Niestety nie moge sobie z tym poradzic. Czy moge liczyc na jakies wskazowki?
kod w C:
#include <stdio.h>
#include <math.h>
main()
{
long long int S[1000];
S[1]=4;
int p=0; //potega liczby Mersenne'a
long long int M; //testowana liczba Mersenne'a
printf ("Znalezione liczby pierwsze Mersenne'a: \n\n");
do{
p++;
M = pow (2,p) - 1;
//petla do generowania S
for (int k=2;k<p;k++)
{
long long int mod;
mod = S[k-1]%M;
S[k] = (mod*mod) - 2;
if(S[k]%M==0)
{
printf ("p: %d \n", p);
printf ("M= %d \n\n", M);
}
}
}
while(p<33);
getchar();
}
Natomiast w Javie stworzylam jak dotad cos takiego:
import java.math.*;
import java.io.*;
class PowerClass {
public BigInteger PowerN (int n) {
return java.lang.Math.pow(2,n);
}
}
public class PrimesSearch {
public static void main(String[] args)
{
BigInteger []S = new BigInteger [1000];
S[1]=4;
int p=0;
BigInteger M = BigInteger.ZERO;
System.out.println("Znalezione liczby pierwsze Mersenne'a");
do{
p++;
PowerClass pc = new PowerClass();
BigInteger mp = pc.PowerN(p);
//M= mp - 1;
M=mp.subtract(BigInteger.ONE);
System.out.println("M= " + M);
for (int k=2; k<p; k++){
BigInteger mod = BigInteger.ZERO;;
mod = S[k-1]%M;
System.out.println("mod= " + mod);
S[k]=(mod*mod)-2;
if (S[k]%M == 0) {
System.out.println("p= " + p);
System.out.println("M= " + M);
}
}
}while (p<33);
}
}
Niestety nie nosi nawet cech dzialania :(