diff --git a/01-Pierścień-Zn.md b/01-Pierścień-Zn.md deleted file mode 100644 index 93c5417..0000000 --- a/01-Pierścień-Zn.md +++ /dev/null @@ -1,21 +0,0 @@ -## Zadanie - -Napisać algorytm, który dla danego `n ∈ ℕ` znajdzie wszystkie: - - 1. elementy odwracalne - 2. dzielniki zera - 3. elementy nilpotentne - 4. elementy idempotentne - -w pierścieniu `{ℤ/nℤ, +, ⋅}`. - -Termin: 31.05 - -### Przykłady: - -> Input: `4` -> Output: `[[1,3], [0,2], [0,2], [0,1]]` - -> Input: `6` -> Output: `[[1,5], [0,2,3,4], [0], [0,1,3,4]]` - diff --git a/02-Wielomiany.md b/02-Wielomiany.md deleted file mode 100644 index 4e9830d..0000000 --- a/02-Wielomiany.md +++ /dev/null @@ -1,19 +0,0 @@ -## Zadanie - -Napisać program, który dla danego pierścienia współczynników `R = ℤ/nℤ, n ∈ ℕ` oraz wielomianów `f,g ∈ R[x] ` zmiennej `x ` znajdzie: - -1. iloczyn `f⋅g ∈ R[x]` -2. klasę reszty `f ∈ R[x]/(g)` -3. największy wspólny dzielnik `nwd(f,g)` korzystając z algorytmu Euklidesa. - -**Uwaga**: wielomiany są podawane jako ciąg współczynników **od wyrazu wolnego, do współczynnika wiodącego**. - -Termin: 07.06 - -### Przykłady: - -> Input: `2, [1,1,1,0,1], [0,1,1]` (i.e. `f = 1 + x + x² + x⁴, g = x² + x`) -> Output: `[[0,1,0,0,1,1,1], [1,1], [1,1]]` - -> Input: `6, [2,1,0,2,1,3], [1,0,0,5]` -> Output: `[[3,1,0,5,0,1,4,5,5], [5,2,1], DivisionError]` diff --git a/App.java b/App.java deleted file mode 100644 index 33e4924..0000000 --- a/App.java +++ /dev/null @@ -1,196 +0,0 @@ -//package com.madrakrystian.algebra; - -import java.util.InputMismatchException; -import java.util.Scanner; -import java.util.Stack; - -public class App { - -// napisać algorytm, który dla danego n ∈ ℕ znajdzie wszystkie: -// -// elementy odwracalne -// dzielniki zera -// elementy nilpotentne -// elementy idempotentne -// w pierścieniu {ℤ/nℤ, +, ⋅}. - -// Przykłady: -// -// Input: 4 -// Output: [[1,3], [0,2], [0,2], [0,1]] -// -// Input: 6 -// Output: [[1,5], [0,2,3,4], [0], [0,1,3,4]] - - - // czytanie inputu z System.in - static Scanner reader = new Scanner(System.in); - - public static void main(String[] args) { - - // ograniczenie 1000 (!) - int number = 1; - - do{ - System.out.println("Enter a number (must be 0 1000 || number < 0); - - // nasza liczba - System.out.println("Input: " + number); - - /* for debug - System.out.println("1. Reversible numbers: " + reversible(number)); - - System.out.println("2. Zero divisors: " + zeroDivisors(number)); - - System.out.println("3. Nilpotent numbers: " + nilpotent(number)); - - System.out.println("4. Idempotent numbers: " + idempotent(number)); - */ - - // na potrzeby tworzenia programu potrzebna byla jakas dynamiczna struktura danych, po zrobieniu mozna zamienic w tablice - Stack> output = new Stack>(); - - // dodanie stosow do nadstosu (dla duzych liczb output staje sie nieczytelny - polecam odkomentowac "for debug") - output.push(reversible(number)); - output.push(zeroDivisors(number)); - output.push(nilpotent(number)); - output.push(idempotent(number)); - - // output taki jak w specyfikacji - System.out.println("Output: " + output); - - // zamkniecie reader'a - reader.close(); - } - - // algorytm nwd (pomocnicza funkcja) - public static int nwd(int a, int b) { - - while(a != b) { - if (a < b) { - b -= a; - } - else a -=b; - } - return a; - } - - // 1. elementy odwracalne - public static Stack reversible(int number) { - - Stack reversibleNumbers = new Stack(); - - int temp; - - for (int i = 1; i zeroDivisors(int number) { - - Stack zeroDivisors = new Stack(); - - // 0 (element neutralny dodawania) zawsze jest swoim dzielnikiem - zeroDivisors.push(0); - - int temp; - - for(int i = 1; i nilpotent(int number) { - - Stack nilpotentNumbers = new Stack(); - - // 0 (element neutralny dodawania) zawsze spelnia warunek nilpotentnosci - nilpotentNumbers.push(0); - - int temp, tempPow; - - for(int i = 2; i idempotent(int number) { - - Stack idempotentNumbers = new Stack(); - - // 0 (element neutralny dodawania) zawsze spelnia warunek idempotentnosci - idempotentNumbers.push(0); - - int temp; - - for(int i = 1; i p1 = new Stack(); - int polyTwo[]; - Stack p2 = new Stack(); - - // wspolczynnik n - int n=1; - - - String str; - String input; - - char temp; - - input = args[0]; - - BufferedReader read = new BufferedReader( - new StringReader(input)); - - // od poczatku pierwszego wielomianu '[' - int i = 3; - try { - if ((str = read.readLine()) != null) { - - if (str.length() > 0) { - n = Character.getNumericValue(str.charAt(0)); - } - temp = str.charAt(i); - while(temp != ']') { - - if(temp != ',') { - p1.push(Character.getNumericValue(temp)); - counterFirst++; - } - i++; - temp = str.charAt(i); - } - - // przejscie do drugiej tablicy (zakladamy ze wielomiany oddzielone sa spacja) - i += 3; - temp = str.charAt(i); - - while(temp != ']') { - - if(temp != ',') { - p2.push(Character.getNumericValue(temp)); - counterSecond++; - } - i++; - temp = str.charAt(i); - } - - // inicjalizacja tablic - polyOne = new int[counterFirst]; - polyTwo = new int[counterSecond]; - - // wypelnianie tablic - for(int j=polyOne.length-1; j>=0; j--) { - - polyOne[j] = p1.pop(); - } - - for(int j=polyTwo.length-1; j>=0; j--) { - polyTwo[j] = p2.pop(); - } - - - // wyswietl wielomiany - System.out.println("f:" + Arrays.toString(polyOne)); - System.out.println("g:" + Arrays.toString(polyTwo)); - - // 1. - System.out.println("1. iloczyn f*g: "); - int res[] = modTheTab(polynomialsMultiplication(polyOne, polyTwo),n); - System.out.println(Arrays.toString(res)); - - // 2. - System.out.println("2. klasa reszty: "); - res = polynomialsDivide(polyOne,polyTwo,n); - if(res != null){ - System.out.println(Arrays.toString(res)); - } - - // 3. - System.out.println("3. nwd: "); - res = nwd(polyOne,polyTwo,n); - System.out.println(Arrays.toString(res)); - - reader.close(); - } - - } catch(IOException e) { - e.printStackTrace(); - } - - //input - /* - do{ - System.out.println("Podaj n: "); - // wpisz liczbe - n = reader.nextInt(); - - }while(n > 1000 || n <= 0); - - - System.out.println("Pierwszy wielomian: "); - polyOne = fillPolynomial(); - - System.out.println("Drugi wielomian: "); - polyTwo = fillPolynomial(); - */ - - - reader.close(); - } - - - // uzupelnianie tablicy - public static int[] fillPolynomial() { - - // zmienna pomocnicza - int temp = 0; - - System.out.println("Podaj liczbe wyrazow w wielomianie: "); - temp = reader.nextInt(); - - int[] tab = new int[temp]; - - // uzupelnianie pierwszego wielomianu - System.out.println("Podaj kolejne wyrazy wielomianu po przycisku enter"); - - for(int i=0; i= ptd) { - - // modulo dla ujemnych - if(polyOne[pod]<0) { - polyOne[pod] = mod + polyOne[pod]; - } - - // szukany mnoznik - temp = multiplier(polyOne[pod], polyTwo[ptd], mod); - - // przesuniecie tablicy - tempTab = polynomialShift(tempTab,i); - - // mnozenie wielomianow - tempTab = polynomialMultiplication(tempTab, temp); - - tempTab = modTheTab(tempTab, mod); - - // odejmowanie wielomianow - polyOne = polynomialsSubstraction(polyOne,tempTab); - - // zmiejszamy stopien pierwszego wielomianu - pod--; - - // zwiekszamy liczbe przesuniec drugiej tablicy - i++; - - } - result = Arrays.copyOf(polyOne, i-1); - - return result; - } - - // 3. - public static int[] nwd(int polyOne[], int polyTwo[], int mod) { - - if(polyTwo.length == 0) { - return polyOne; - } - if(polyOne.length >= polyTwo.length) { - return nwd(polyTwo, polynomialsDivide(polyOne,polyTwo,mod),mod); - } - else { - return nwd(polyTwo, polynomialsDivide(polyTwo,polyOne,mod),mod); - } - } - -} \ No newline at end of file