. Klasa GenerateAPrime
realizująca zadanie jest przedstawiona na wydruku
A.1. Ponieważ dziedziczy ona po klasie
TaskAdapter, zamiast bezpośrednio implementować interfejs
Task, są w niej zdefiniowane jedynie metody
doIt() oraz size().
Metoda doIt() wczytuje z bazy danych parametry generowanej liczby (wartości bits i certainty), w pętli tworzy kolejne liczby o zadanej długości, aż utworzona liczba będzie pierwsza z zadanym prawdopodobieństwem, po czym zapisuje wygenerowaną liczbę do bazy danych. Metoda przekazuje wartość false, jeśli wystąpił jakiś błąd (klauzula catch), w przeciwnym wypadku przekazuje wartość true.
Metoda size() przekazuje iloczyn długości liczby oraz prawdopodobieństwa, że jest ona pierwsza. Spodziewany czas wygenerowania odpowiedniej liczby rośnie wraz z wartością tego iloczynu.
package jodl.example.prime;
import jodl.task.TaskAdapter;
import jodl.db.SQL;
import jodl.util.*;
import java.sql.Connection;
import java.math.BigInteger;
import java.util.*;
public class GenerateAPrime extends TaskAdapter {
int bits = 1;
int certainty = 1;
public boolean doIt()
{
try {
String[] val = SQL.getRow(dbConnection,
"select bits, certainty from prime where prime_id = " + taskId);
bits = Conv.string2int(val[0]);
certainty = Conv.string2int(val[1]);
BigInteger bigint;
do {
bigint = new BigInteger(bits,
new Random((new Date()).getTime()));
} while (!bigint.isProbablePrime(certainty));
SQL.execute(dbConnection,
"update prime set number = '" + bigint +
"' where prime_id = " + taskId);
return true;
} catch (Exception e) {
return false;
}
}
public int size()
{
return bits*certainty;
}
}
|
package jodl.example.prime;
import jodl.server.*;
import jodl.task.*;
import jodl.db.*;
import java.sql.*;
public class Primes {
public static void main(String[] args)
{
try {
Server server = new Server(args);
Family primes = server.getFamilyInstance("jodl_example_prime");
server.run(primes);
String[] numbers = SQL.getArray(server.getDBConnection(),
"select number from prime");
for (int i = 0; i < numbers.length; i++)
System.out.println(numbers[i]);
} catch (Exception e) {
e.printStackTrace();
}
}
}
|