function campur(n : integer) : integer; begin campur := n * n; end; function aduk(x,y,z : integer) : integer; begin if (y = 0) then aduk := 1 else if (y mod 2 = 0) then aduk := campur(aduk(x,y div 2,z)) mod z else aduk := ( (x mod z) * aduk(x,y-1,z) ) mod z; end; var a,b,c : integer; begin readln(a,b,c); writeln(aduk(a,b,c)); end.
-
Jika program dijalankan dan pengguna memasukkan angka 2, 10, dan 10, berapakah angka yang dikeluarkan program?
-
Jika program dijalankan dan pengguna memasukkan angka 4, 40, dan 5, berapakah angka yang dikeluarkan program?
-
aduk(2,10,10) = 210 mod 10 = 1024 mod 10 = 4.
-
aduk(4,40,5) = 440 mod 5, karena terlalu besar, bagi hasilnya seperti algoritma program.
440 mod 5 = (420 mod 5)2 mod 5
420 mod 5 = (410 mod 5)2 mod 5
410 mod 5 = (45 mod 5)2 mod 5
45 mod 5 = (4*44 mod 5)2 mod 5
44 mod 5 = 256 mod 5 = 1.45 mod 5 = (4*1)2 mod 5 = 16 mod 5 = 1
410 mod 5 = 12 mod 5 = 1
420 mod 5 = 12 mod 5 = 1
440 mod 5 = 12 mod 5 = 1
Dengan demikian, angka yang dicetak oleh program adalah 1.
Pertama, analisis setiap fungsi dan langkah.
Fungsi campur adalah fungsi yang akan menghasilkan bilangan kuadrat dari parameternya.
Sedangkan fungsi aduk akan memeriksa nilai y. Jika y bernilai 0, maka fungsi bernilai 1.
Jika y merupakan bilangan genap, maka nilai y akan dibagi dua namun dengan hasil yang dikuadratkan dan mod z.
Jika y merupakan bilangan ganjil, maka fungsi bernilai (x mod z) dikali fungsi aduk dengan y-1.
Dengan mengabaikan mod, maka terlihat bahwa f(x,y=0) = 1.
f(x,1) = x
f(x,2) = x2
f(x,3) = x*f(x,2) = x3
f(x,4) = x2 * x2 = x4.
Dengan demikian f(x,y) = xy. Dengan menambahkan z, maka:
aduk(x,y,z) = xy mod z.