| Koksqrt.java |
1 package demo.d1;
2
3 /**
4 * Lasketaan mitkä kokonaisluvut ovat jonkin luvun neliöitä.
5 * @author Vesa Lappalainen
6 * @version 1.0, 10.01.2003
7 * <pre>
8 * Aluksi mietitään miten arvot käyttäytyvät
9 * n sqrt(n)
10 * 0 0
11 * 1 1
12 * 2 1.4...
13 * 3 1.7...
14 * 4 2
15 * 5 2.2...
16 * 6 2.4...
17 * 7 2.6...
18 * 8 2.8...
19 * 9 3
20 *
21 * Eli oikeastaan kannattaakin lukuja käydä lävitse tuolla
22 * neliöjuuripuolella... Silloin niiden neliöt ovat ne halutut
23 * kokonaisluvut.
24 * </pre>
25 */
26 public class Koksqrt {
27
28 private static void tulosta(int n1, int n2) {
29 System.out.println(" " + n1 + " => " + n2);
30 }
31
32
33 //-------------------------------------------------------------------------
34 private static void tulostaNeliojuuret1(int raja) {
35 // Matemaatikon versio
36 int n = 0, ns = 0;
37 while (n <= raja) {
38 tulosta(n,ns);
39 ns++;
40 n = ns * ns;
41 }
42 }
43
44
45 //-------------------------------------------------------------------------
46 private static void tulostaNeliojuuret2(int raja) {
47 // "Raakavoimaratkaisu"
48 int ns,n = 0;
49 double dns;
50 while (n <= raja) {
51 dns = Math.sqrt(n);
52 ns = (int)Math.round(dns);
53 if ( dns == ns)
54 tulosta(n,ns);
55 n++;
56 }
57 }
58
59
60 //-------------------------------------------------------------------------
61 private static void tulostaNeliojuuret3(int r) {
62 // "Hakkerin" ratkaisu
63 for (int i=0,j=0;i<r;++j,i=j*j) System.out.println(" "+i+" => "+j);
64 }
65
66
67 //-------------------------------------------------------------------------
68 private static void tulostaNeliojuuret4(int raja) { // NOPMD rajaa ei käytetä
69 // M$ ratkaisu, jossa päätetty että 100 riittää :-)
70 tulosta(0,0);
71 tulosta(1,1);
72 tulosta(4,2);
73 tulosta(9,3);
74 tulosta(16,4);
75 tulosta(25,5);
76 tulosta(36,6);
77 tulosta(49,7);
78 tulosta(64,8);
79 tulosta(80,9); // Kuuluu M$-ratkaisuun, korjataan ver 3.5 :-)
80 tulosta(100,10);
81 }
82
83
84 /**
85 * Testataan eri versioita laskennasta
86 * @param args ei käytössä
87 */
88 public static void main(String[] args) {
89 tulostaNeliojuuret1(1000);
90 tulostaNeliojuuret2(1000);
91 tulostaNeliojuuret3(1000);
92 tulostaNeliojuuret4(1000);
93 }
94
95 }
96