From 972f30d9373e41ec253be5ed8e42199fef2f0b7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20D=C4=85bkowski?= Date: Thu, 31 May 2018 06:20:14 +0000 Subject: [PATCH] =?UTF-8?q?Prze=C5=9Blij=20pliki=20do=20''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Main.java | 44 +++++++++++++++++++++++++++ Ring.java | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 Main.java create mode 100644 Ring.java diff --git a/Main.java b/Main.java new file mode 100644 index 0000000..53cb448 --- /dev/null +++ b/Main.java @@ -0,0 +1,44 @@ +import java.util.Arrays; +import java.util.Scanner; + +public class Main { + + public static void main(String[] args) { + int n; + if (args.length < 1) { + n = -1; + Scanner scanner = new Scanner(System.in); + while (n < 2) { + System.out.print("n = "); + n = scanner.nextInt(); + } + } else { n = Integer.parseInt(args[0]); } + + Ring r = new Ring(n); + + r.wyznaczOdwracalne(); + r.wyznaczDzielniki(); + r.wyznaczNil(); + r.wyznaczId(); + + System.out.println("elementy odwracalne (" + r.odwracalne.size() + "):"); + for (int i: r.odwracalne) { + System.out.print(i + ", "); + } + System.out.println(); + System.out.println("dzielniki zera (" + r.dzielniki.size() + "):"); + for (int i: r.dzielniki) { + System.out.print(i + ", "); + } + System.out.println(); + System.out.println("elementy nilpotentne (" + r.nilpotentne.size() + "):"); + for (int i: r.nilpotentne) { + System.out.print(i + ", "); + } + System.out.println(); + System.out.println("elementy idempotentne (" + r.idempotentne.size() + "):"); + for (int i: r.idempotentne) { + System.out.print(i + ", "); + } + } +} diff --git a/Ring.java b/Ring.java new file mode 100644 index 0000000..5a29b91 --- /dev/null +++ b/Ring.java @@ -0,0 +1,89 @@ +import java.util.ArrayList; + +public class Ring { + int n; + ArrayList odwracalne; + ArrayList dzielniki; + ArrayList nilpotentne; + ArrayList idempotentne; + + public Ring(int n) { + this.n = n; + odwracalne = new ArrayList<>(); + dzielniki = new ArrayList<>(); + nilpotentne = new ArrayList<>(); + idempotentne = new ArrayList<>(); + } + private int nwd(int a, int b){ + while (a != b){ + if (a > b) a -=b; + else b -= a; + } + return a; + } + + private int phi(int a){ + float result = a; + for (int p = 2; p * p <= a; ++p) { + if (a % p == 0) { + while (a % p == 0) + a /= p; + result *= (1.0 - (1.0 / (float)p)); + } + } + if (a > 1) + result *= (1.0 - (1.0 / (float)a)); + + return (int)result; + } + + static int modularPower(int x, int y, int p){ + int res = 1; + x = x % p; + + while (y > 0){ + if((y & 1)==1) res = (res * x) % p; + y = y >> 1; + x = (x * x) % p; + } + return res; + } + + void wyznaczOdwracalne(){ + for (int i = 1; i < n; ++i){ + if (nwd(i, n) == 1) odwracalne.add(i); + } + } + + void wyznaczDzielniki(){ + for (int i = 1; i < n; ++i){ + for (int j = 1; j < n; ++j){ + if(((i * j) % n) == 0){ + dzielniki.add(i); + break; + } + } + } + } + + void wyznaczNil(){ + for (int i = 1; i < n; ++i){ + for (int j = 1; j <= phi(n); ++j){ + if (modularPower(i, j, n) == 0){ + nilpotentne.add(i); + break; + } + } + } + } + + void wyznaczId(){ + int pow; + for (int i = 0; i < n; ++i){ + pow = (i * i) % n; + if (pow == i){ + idempotentne.add(i); + } + } + } +}