Диксон Факторизация Java с использованием списков мощности - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь выполнить факторизацию Диксона в Java, используя списки мощности, как описано в Википедии.Вот мой код для факторизации Диксона:

public static void DixonFactor(int n){
    int a,nbSquares=0,factor1,factor2;
    Map<Integer,List> pair_list = new HashMap<Integer,List>();
    List<Integer> powerList;

    // Iterate until we find 2 square numbers
    while (nbSquares<2 ){
    int x = (int) (Math.random()* ((n - Math.sqrt(n)) + 1 + Math.sqrt(n)));
    a = (x*x)%n;

    if (!isBsmooth(a, 7) || (primeFactors(a).get(primeFactors(a).size()-1)>7)) {continue;}

    else{
        System.out.println("x = "+x + " a = "+a);
        powerList = generatePowerSet(a, 7);
        if (isEvenList(powerList)) {nbSquares++;;continue;}
        else{
            pair_list.put(x, powerList);
            // Combine all power lists and check if we can produce an even power list
            if (pair_list.size()>1){  // Combined list has multiple elements
               List<Integer> tempList = new ArrayList<>();tempList.add(0);tempList.add(0);tempList.add(0);tempList.add(0);
               int product=1;
               Set entrySet = pair_list.entrySet();

               for(List<Integer> vals :pair_list.values()){

                   tempList = addLists(vals, tempList);
                   System.out.println("temp list :"+tempList);
               }
               for (Integer in:pair_list.keySet()){
                   product= product*in;
               }
               if (isEvenList(tempList)) {nbSquares++;break;}
               else{
                   pair_list.put(product, tempList);
               }

            }
        }
    }
    }
System.out.println(pair_list);
}
  • Функция "isBsmooth" сообщает, является ли "a" гладкой 7
  • Функция "primeFactors" возвращает список простых факторовиз "a" (допустимо меньше 7 факторов)
  • generatePowerSet возвращает powerList
  • AddLists добавляет два списка в виде добавления вектора
  • isEven список сообщает, является ли список четным(содержит все четные числа)

Я применяю алгоритм, поэтому в основном я объединяю powerlist и проверяю, получаю ли я четный список, затем рассматриваю его как квадрат и разрыв;Я не мог заставить его работать после многих попыток, и функция печати не дает желаемых результатов.

...