import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.util.Arrays; import java.util.Scanner; import java.util.Stack; public class MainApp { // czytanie inputu z System.in static Scanner reader = new Scanner(System.in); public static void main(String[] args) { // liczniki indeksow wielomianow int counterFirst = 0, counterSecond = 0; // wielomiany + pomocniczme stosy int polyOne[]; Stack 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); } } }