Member 13808732 Ответов: 0

Как генерировать простые числа с помощью связанных списков ?


Итак, я хочу разработать программу, которая генерирует как можно больше простых чисел (без использования BigInteger). Идея заключается в том, что вместо этого я использую связанный список, беру числа в виде строки, затем преобразую их в связанный список, а затем выполняю вычисления для генерации простых чисел, начиная с входных данных. В основном идея должна быть похожа на эту картину.

https://i.imgur.com/prc9A0T.jpg[^]

Это то, что я делал до тех пор, пока не узнал, я застрял в том, как делать вычисления с помощью связанных списков.

package primenumbersgenerator;

    class Node {

    public int value;
    public Node next;

    public Node(int v) {
        value = v;
        next = null;
    }
}

class LinkedList {

    public Node head;
    public Node head2;
    public Node head3;

    public LinkedList() {
        head = null;
    }

    public void AddTail(int v) {
        Node t = new Node(v);
        if (head == null) {
            head = t;
            return;
        }
        Node h = head;
        while (h.next != null) {
            h = h.next;
        }
        h.next = t;
    }

    public void AddHead(int v) {
        Node t = new Node(v);
        t.next = head;
        head = t;
    }

    public String toString() {
        String s = "";
        Node h = head;
        while (h != null) {
            s += h.value;
            h = h.next;
        }
        return s;
    }

    public void Reverse() {
        if (head == null) {
            return;
        }
        if (head.next == null) {
            return;
        }
        Node one = head;
        Node two = one.next;
        Node three = two.next;
        one.next = null;
        while (three != null) {
            two.next = one;
            one = two;
            two = three;
            three = three.next;
        }
        two.next = one;
        head = two;
    }

    public void stringToLinkedList(String s) {
        for (int i = 0; i < s.length(); i++) {
            int a = Integer.parseInt(s.substring(i, i + 1));
            this.AddHead(a); 
        }
    }

    public LinkedList Addition(LinkedList L1, LinkedList L2) {
        LinkedList dummy = new LinkedList();
        int carry = 0;
        Node LL1 = L1.head;
        Node LL2 = L2.head;
        while (LL1 != null && LL2 != null) {
            int AddValues = (LL1.value + LL2.value + carry) % 10;
            carry = (LL1.value + LL2.value + carry) / 10;
            dummy.AddHead(AddValues);
            LL1 = LL1.next;
            LL2 = LL2.next;
        }
        while (LL1 != null) {
            int AddValues = (LL1.value + carry) % 10;
            carry = (LL1.value + carry) / 10;
            dummy.AddHead(AddValues);
            LL1 = LL1.next;
        }
        while (LL2 != null) {
            int AddValues = (LL2.value + carry) % 10;
            carry = (LL2.value + carry) / 10;
            dummy.AddHead(AddValues);
            LL2 = LL2.next;
        }
        if (carry != 0) {
            Node LL4 = new Node(carry);
            Node next = LL4.next;
        }
        return dummy;
    }

    public LinkedList Multiplication(LinkedList L1, LinkedList L2) {
        LinkedList dummy = new LinkedList();
        int carry = 0;
        Node LL1 = L1.head;
        Node LL2 = L2.head;
        while (LL1 != null && LL2 != null) {
            int MultiplyValues = (LL1.value * LL2.value + carry) % 10;
            carry = (LL1.value * LL2.value + carry) / 10;
            dummy.AddHead(MultiplyValues);
            LL1 = LL1.next;
            LL2 = LL2.next;
        }
        while (LL1 != null) {
            int MultiplyValues = (LL1.value + carry) % 10;
            carry = (LL1.value + carry) / 10;
            dummy.AddHead(MultiplyValues);
            LL1 = LL1.next;
        }
        while (LL2 != null) {
            int MultiplyValues = (LL2.value + carry) % 10;
            carry = (LL2.value + carry) / 10;
            dummy.AddHead(MultiplyValues);
            LL2 = LL2.next;
        }
        if (carry != 0) {
            Node LL4 = new Node(carry);
            Node next = LL4.next;
        }
        return dummy;
    }

    public int squareRoot(int i) {
        i = 2;
        while (i * i > i) {
            i++;
        }
        return i;
    }

    public int primeGeneration(int i) {

    }
    public boolean findPrime(int n) {
        int a = 2;
        while (a < squareRoot(n)) {
            for (int b = 2; b < n - 1; b++) {
                if (a * b == n) {
                    return false;
                } else {
                    b++;
                }
            }
            a++;
        }
        return true;
    }

    public boolean IsPrime(LinkedList ml) {

    }
}

public class Test {

    public static void main(String[] args) {
        LinkedList ml = new LinkedList();
        String LL1 = "165";
        int count = 200;
        ml.stringToLinkedList(LL1);
        long startTime = System.currentTimeMillis();
        for (int i = 0; i <= count;) {
            if (IsPrime(m) == true) {
                i++;
            }
        }
        long endTime = System.currentTimeMillis();
        long total = endTime - startTime;
        System.out.println();
        System.out.println(total + " ms");
    }
}


Что я уже пробовал:

Я написал код выше, но я застрял на том, как делать вычисления в связанных списках для генерации простых чисел.

Patrice T

В чем причина использования связанного списка ?

0 Ответов