//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