Как генерировать простые числа с помощью связанных списков ?
Итак, я хочу разработать программу, которая генерирует как можно больше простых чисел (без использования 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
В чем причина использования связанного списка ?