function mencari(N:integer):integer; var i,j,z:integer; begin mencari:=0; for i:=1 to N do begin j:=1; z:=0; while (j <= i) do begin if (i mod j = 0) then inc(z); inc(j); end; if (z mod 2 <> 0) then mencari:=mencari+1; end; end;
-
Berapakah nilai yang dihasilkan dari pemanggilan mencari(50)?
-
Berapakah nilai yang dihasilkan dari pemanggilan mencari(9000)?
-
Bilangan kuadrat ≤ 50:
1, 4, 9, 16, 25, 36, 49
Jadi nilai yang dihasilkan dari pemanggilan mencari(50) adalah 7. -
Karena 9000 terlalu besar untuk dicari satu-satu, maka cari bilangan kuadrat terbesar yang kurang dari 9000.
1002 = 10000 dan 902 = 8100, sehingga nilainya pasti di antara 90-100.Jika diambil tengahnya 952 = 9025 yang mana sedikit di atas 9000. Dengan demikian banyaknya bilangan kuadrat yang kurang dari 9000 = 94.
Pada perulangan for dari 1 sampai N, terdapat perulangan while
yang akan menambah nilai z jika i mod j = 0, artinya z merupakan banyaknya faktor dari i.
Nilai dari fungsi adalah jika z merupakan bilangan ganjil yang artinya
fungsi akan bernilai banyaknya bilangan dari 1 sampai N yang memiliki jumlah faktor ganjil.
Bilangan yang memiliki jumlah faktor ganjil adalah bilangan yang dapat dinotasikan
an x bo x…x mz, dimana n,o,…,z adalah bilangan genap. Notasi tersebut juga dapat ditulis menjadi:
(an/2 x bo/2 x…x mz/2)2.
Sehingga untuk mencari nilai yang dihasilkan dari fungsi adalah dengan menghitung banyaknya bilangan kuadrat yang kurang dari N.