Я пытаюсь написать собственную реализацию теста примитивности Миллера Рабина. Я мог бы заставить его работать, но он был очень медленным для значений размером более 64 бит.Необработанное исключение: NoSuchMethodException
В проекте стандарта ANSI X9.80, «ОБРАЗОВАНИЕ ПРАЙМ-НОМЕРОВ, ИСПЫТАНИЕ ПРЯМОЙ И СЕРТИФИКАТОВ ПРИМ.», Они определяют поведение до 1024 бит. Моя программа (на i7 6700k) займет в лучшем случае месяцы в лучшем случае для работы с одним 1024 битным целым числом.
Итак, я обратился к реализации Java-теста Миллера Рабина, чтобы узнать, какие микро-оптимизации они использовали для обеспечения производительности.
Я проработал свой исходный код, но я подбежал к стене. Многие методы, которые они используют, являются частными, а тестирование поведения ваших кодов по сравнению с кодом, который вы не можете выполнить, довольно сложно. Для начала первый внутренний метод, который я хотел назвать, - BigInteger.mod2(int)
Я не запрограммировал широко в Java раньше, но вот где я застрял:
import java.lang.reflect.*;
import java.math.BigInteger;
public class HelloWorld
{
public static void main(String[] args)
{
BigInteger a = new BigInteger("123456789101112");
Method mod2 = BigInteger.class.getDeclaredMethod("mod2", int.class);
//Class[] arg_types = new Class[1];
//arg_types[0] = int.class;
//Method mod2 = BigInteger.class.getDeclaredMethod("mod2", arg_types);
mod2.setAccessible(true);
Object b = mod2.invoke(a, 32);
System.out.print(b);
}
}
Обе версии исключений NoSuchMethodException вызов бросить «getDeclaredMethod». Я просмотрел документацию для «getDeclaredMethod», и они говорят, что делают именно то, что я сейчас делаю, когда люди спрашивают, как заставить эту функцию работать.
Любые советы о том, как использовать частные методы BigInteger, в частности BigInteger.mod2(int)
, были бы очень благодарны. Благодаря!
Как-то я думаю, вы пропустили всю точку зрения [частный] (https: //en.oxforddictionaries.com/definition/private). –
Каким образом? Я пытаюсь написать собственную реализацию частного метода в классе java. Я хотел бы иметь возможность напрямую вызвать этот метод, чтобы сравнить вывод моего кода и частного метода. –
Не только это, но любые оптимизации, которые вы можете сделать, используя частные методы в таких местах, как 'BigDecimal', будут три раза сбрасываться путем использования рефлексии. –