X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?a=blobdiff_plain;f=kodovi%2Fefikasnost-algoritama%2FPitagora.java;fp=kodovi%2Fefikasnost-algoritama%2FPitagora.java;h=f4e890e468059239f2979d50c642ce6fb50db91f;hb=8b9bc1b025e43687b00777fe9f2dae1bd626e985;hp=0000000000000000000000000000000000000000;hpb=5cecf742a63598e1107ae576b584d0064786ebbc;p=spa1-materijali.git diff --git a/kodovi/efikasnost-algoritama/Pitagora.java b/kodovi/efikasnost-algoritama/Pitagora.java new file mode 100644 index 0000000..f4e890e --- /dev/null +++ b/kodovi/efikasnost-algoritama/Pitagora.java @@ -0,0 +1,131 @@ +public class Pitagora { + + /** + * Generisanje svih trojki brojeva do neke granice uz proveru da li je to + * upravo Pitagorina trojka. + */ + static void trojke1() { + int br = 0; + int gr = 100; + + System.out.println("\nPitagorine trojke\n"); + + for (int x = 1; x <= gr; x++) { + for (int y = 1; y <= gr; y++) { + for (int z = 1; z <= gr; z++) { + if (x * x + y * y == z * z) { + br++; + stampajTrojku(br, x, y, z); + } + } + } + } + } + + /** + * Generisanje parova brojeva a,b i provera da li postoji celo c koje bi + * formiralo Pitagorinu trojku. + */ + static void trojke2() { + int br = 0; + int gr = 100; + + System.out.println("\nPitagorine trojke 2\n"); + + for (int x = 1; x <= gr; x++) { + for (int y = 1; y <= gr; y++) { + double zreal = x * x + y * y; + zreal = Math.sqrt(zreal); + // Provera da li je ceo broj + int z = (int) zreal; + if (zreal == z) { + br++; + stampajTrojku(br, x, y, z); + } + } + } + } + + /** + * Euklidova teorema daje Pitagorinu trojku za bilo koja dva prirodna broja + * n i m. + */ + static void trojke3() { + int br = 0; + int gr3 = 10; + + System.out.println("\nPitagorine trojke 3\n"); + + for (int m = 1; m <= gr3; m++) { + for (int n = 1; n <= m - 1; n++) { + int x = m * m - n * n; + int y = 2 * m * n; + int z = m * m + n * n; + br++; + stampajTrojku(br, x, y, z); + } + } + } + + /** + * Generisanje trojki kod kojih je razlika izmedju a i c 1. Postupak je + * izveden preko Euklidove teoreme. + */ + static void trojke4() { + int br = 0; + int gr4 = 10; + + System.out.println("\nPitagorine trojke 4\n"); + + for (int m = 2; m <= gr4; m++) { + int n = m - 1; + int a = 2 * m * n; + int b = m * m - n * n; + int c = m * m + n * n; + br++; + stampajTrojku(br, a, b, c); + } + } + + /** + * Generisanje trojki kod kojih je razlika izmedju a i b 1. Postupak je + * izveden preko Euklidove teoreme i koriste se inkrementalna resenja + * dobijene Pell-ove jednacine. + */ + static void trojke5() { + int gr5 = 6; + int br = 0; + + System.out.println("\nPitagorine trojke 5\n"); + + int w = 3; + int n = 2; + for (int i = 1; i <= gr5; i++) { + int m = n + w; + int a = 2 * m * n; + int b = m * m - n * n; + int c = m * m + n * n; + br++; + stampajTrojku(br, a, b, c); + int temp = w; + w = 3 * w + 4 * n; + n = 2 * temp + 3 * n; + } + } + + public static void stampajTrojku(int br, int x, int y, int z) { + System.out.print(br + " "); + System.out.print("a = " + x); + System.out.print(", b = " + y); + System.out.print(", c = " + z); + System.out.println(); + } + + public static void main(String[] args) { + trojke1(); + trojke2(); + trojke3(); + trojke4(); + trojke5(); + } +}