//package com.madrakrystian.algebra; import java.util.Arrays; import java.util.Scanner; public class MainApp { // Napisać program, który dla danego pierścienia współczynników R = ℤ/nℤ, n ∈ ℕ oraz wielomianów f,g ∈ R[x] zmiennej x znajdzie: // // iloczyn f⋅g ∈ R[x] // klasę reszty f ∈ R[x]/(g) // 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] // Input w programie dla przykladu 1 // Podaj n: // 2 // Pierwszy wielomian: // Podaj liczbe wyrazow w wielomianie: // 5 // Podaj kolejne wyrazy wielomianu po przycisku enter // 1 // 1 // 1 // 0 // 1 // Drugi wielomian: // Podaj liczbe wyrazow w wielomianie: // 3 // Podaj kolejne wyrazy wielomianu po przycisku enter // 0 // 1 // 1 // czytanie inputu z System.in static Scanner reader = new Scanner(System.in); public static void main(String[] args) { // wielomiany int polyOne[]; int polyTwo[]; // wspolczynnik n int n=1; //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(); // 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); 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(); } // 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; } return nwd(polyTwo, polynomialsDivide(polyOne,polyTwo,mod),mod); } }