• Tidak ada hasil yang ditemukan

???, maka output yang. Tabel 27 Daftar polinomial primitif?????? ?? Polinomial Primitif?? Polinomial Primitif

N/A
N/A
Protected

Academic year: 2021

Membagikan "???, maka output yang. Tabel 27 Daftar polinomial primitif?????? ?? Polinomial Primitif?? Polinomial Primitif"

Copied!
33
0
0

Teks penuh

(1)

Lampiran 1 Daftar Polinomial Primitif

Polinomial primitif diimplementasikan pada program dalam lampiran 3 dan 7. Polinomial ini disimpan dalam array. Input integer ? adalah representasi vektor terner untuk ?? . Misalkan kita input ? ? ? ?, maka output yang dihasilkan adalah [2,3,0,4].

Tabel 27 Daftar polinomial primitif ? ? ??? ?

?? Polinomial Primitif ?? Polinomial Primitif

2 x2 + x +2 34 x34 + x4 +2x +2 3 x3 + 3x + 2 35 x35 + x3 + x2 +3x +2 4 x4 + x3 + 3x + 2 36 x36 + x3 +3x +2 5 x5 + 4x + 2 37 x37 + x2 + 3x +2 6 x6 + x + 2 38 x38 + x3 + 3x2 +x +2 7 x7 + 3x +2 39 x39 + 2x3 + 3x + 2 8 x8 + x2 + 2x +3 40 x40 + x3 + x2 +3x +3 9 x9 + x2 + 2x +3 41 x41 + 4x3 +2 10 x10 + x2 + x +3 42 x42 + x3 + 3x2 +x +2 11 x11 + 3x +2 43 x43 + 3x + 2 12 x12 + x3 + 3x +3 44 x44 +2x4 + x3 +x2 +3x +3 13 x13 + x3 + 3x + 2 45 x45 + 2x2 +2x +2 14 x14 + x3 + x2 +2x + 2 46 x46 +x4 + 2x3 +x2 +3 15 x15 + x2 +2 47 x47 + x4 +x3 +x2 +2 16 x16 + x3 + 3x +2 48 x48 + 2a17 + 1 17 x17 + 2x2 +2x +2 49 x49 +x3 + x2 +4x +2 18 x18 + x4 + 2x +2 50 x50 + x4 +x3 +2x2 +3 19 x19 + x3 + 2x +2 51 x51 + x3 +x2 +3 20 x20 + x2 +2x +3 52 x52 + x4 + x3 +x2 +2x +3 21 x21 + 4x +2 53 x53 + 2x3 + 2x2 +x +3 22 x22 + x2 +x +3 54 x54 + x3 +x2 +x +3 23 x23 + x2 +4x +3 55 x55 + 3x3 + x + 2 24 x24 + x3 + x2 +x +2 56 x56 + x3 +x2 +x +3 25 x25 + 2x3 +3x +2 57 x57 + 4x +2 26 x26 + x3 + x2 +2x +2 58 x58 + x4 + 2x2 +2x +2 27 x27 + 4x + 2 59 x59 + x3 +2x2 +x +3 28 29 30 31 32 33 x28 + x3 +2x +3 x29 + x3 + x2 +3 x30 +x4 + 2x2 +x +3 x31 + 3x + 2 x32 + x3 + x2 +4x +2 x33 + 2x2 +2x +2 60 61 62 63 64 65 x60 + x3 +x2 +3x +3 x61 +x2 +2x +3 x62 + x4 + x3+x2 +x +2 x63 +x2 +2 x64 + 2x4 + x3 +3x2 +4x +3 x65 + 3x3 +x2 +x +2

(2)

Lampiran 2 Program Sistem Aritmetik Finite field ? ? ??? ?

Program aritmetika pada finite field ? ? ??? ? adalah pendukung pada program solusi masalah logaritma diskret pada ? ? ??? ?? (Lampiran 7). Program ini mengacu pada tulisan Ahmadi 2009. Implementasi program menggunakan software Maple 11. Misalkan ? ?? ? ? ?? ? ? ?? ? ?? ? ? ?? ? ? , ditulis [4, 0, 2, 1, 3, 1].

Program 3.1 Mengubah Vektor Penta ke Desimal

Deskripsi : UbahPenKeDes adala h prosedur mengubah vektor penta ke desimal dari order rendah ke order tinggi.

Input : vektor penta. Output : integer.

UbahPenKeDes := proc( N::list )

local D1, D2 :: list, Des::integer;

D1:=map(x -> 5^x,[seq(i,i=0..(nops(N)-1))]): D2:=[seq(N[j]*D1[j],j=1..nops(N))]:

Des:=add( i, i=D2 ); end proc:

Contoh: input I := [1,1,1,2,3,4], output O = 1.5^0 + 1.5^1 + 1.5^2 + 2.5^3+ 3.5^4 + 4.5^4.

A:=[1,1,1,2,3,4]: UbahPenKeDes(A);

14656

Program 3.2 Mengubah Desimal ke Vektor Penta

Deskripsi : UbahDesKe Pen adalah Prosedur untuk mengubah desimal ke vektor penta.

Input : integer. Output : vektor penta.

UbahDesKePen := proc(B::integer) local Kv::list: Kv:=convert(B,base,5): end proc: UbahDesKePen(259); [4,1,0,2]

Program 3.3 Reduksi Nol

Deskripsi : ReduNol adalah prosedur untuk mereduksi nilai nol. Input : vektor penta

(3)

ReduNol:=proc(R::list)

local T::list, j,t::integer: T:=R: t:=nops(T):

for j while T[t]=0 and t>1 do T:=subsop(t=NULL,T): t:=t-1: end do: return(T); end proc: Contoh: A:=[1,0,2,0,4,0] ReduNol(A); [1,0,2,0,4]

Program 3.4 Adisi Vektor

Deskripsi : AdisiP adalah prosedur untuk menjumlahkan dua vektor. Input : vektor penta.

Output : vektor penta.

AdisiP:=proc(S::list,T::list) local R::list, s,j,t::integer: s:=nops(S): t:=s:

if S=[0] then return(T); elif T=[0] then return(S); elif s=nops(T) then

R:=[seq((op(i,S)+op(i,T)) mod 5,i=1..s)]; R:=ReduNol(R);

elif nops(S)<nops(T) then

subsop(seq(i=(op(i,S)+op(i,T) mod 5),i=1..nops(S)),T); else subsop(seq(i=(op(i,T)+op(i,S) mod 5),i=1..nops(T)),S); end if: end proc: Contoh: A:=[3,4,3]: B:=[3,4,1]: AdisiP(B,A); [1,3,4]

Program 3.5 Negatif Vektor

Deskripsi : NegP adalah prosedur untuk mengubah vektor menjadi negatif. Input : vektor penta.

Output : vektor penta. NegP:=proc(L::list) map(x->(-x mod 5),L);

(4)

end proc: Contoh:

A:=[1,0,3]: nB:=NegP(A); [4,0,2]

Progaram 3.6 Kelipatan Vektor

Deskripsi : KVek adalah prosedur untuk kelipatan vektor. Input : vektor penta dan integer.

Output : vektor penta.

KVekP:=proc(L::list,n::integer[0..4]) if n=0 then return([0]);

elif n=1 then return(L); else ((n*L)mod 5) end if; end proc:

Contoh:

A:=[2,4,3,1]: KVekP(A,3); [1,2,4,3]

Program 3.7 Perkalian vektor

Deskripsi : KaliP adalah prosedur untuk perkalian vektor A dan B. Input : vektor penta.

Output : vektor penta.

KaliP:=proc(A::list,B::list)

local R,U,V,S,T::list, s,j,t,a::integer: if A=[0] or B=[0] then return([0]) end if; s:=nops(A): t:=nops(B): S:=A: T:=B: if t<s then S:=B: T:=A: a:=s: s:=t: t:=a: end if: R:=KVekP(T,op(1,S)); for j from 1 to (s-1) do T:=[0,op(T)]; V:=KVekP(T,op(j+1,S)): R:=AdisiP(R,V): end do: return(R); end proc: Contoh: S:=[2,1,1,3]: T:=[0,4,1,2]: KaliT(S,T);

(5)

[0,3,1,4,0,0,1] Program 3.8 Pembagian Vektor

Deskripsi : BagiP adalah prosedur untuk pembagian vektor A dan B. Input : vektor penta.

Output : vektor penta.

BagiP:=proc(T::list,S::list)

local K,Q,R,H::list, i,g,r,s,k,h,t::integer: if S=[0] then return(false) end if:

R:=T: Q:=[0]: r:=nops(T): s:=nops(S): g:=op(s,S): if s=1 then Q:=KVekP(R,op(S)): R:=[0]: return([Q,R]); end if: for i while r>=s do k:=r-s: t:=op(r,R): h:=(t/g)mod 5: if k=0 then K:=KVekP(S,h): Q:=AdisiP(Q,[h]): else H:=KVekP(S,h): K:=[seq(0,j=1..k),op(H)]: Q:=AdisiP(Q,[seq(0,j=1..k),h]): end if: K:=NegP(K): R:=AdisiP(K,R): r:=nops(R): end do: return([Q,R]); end proc: Contoh: A:=[2,3,4,1,3,2]: B:=[2,1,1]: BagiP(A,B); [[1,1,1,2],[0]]

Program 3.9 Hasil Bagi vektor A oleh B

Deskripsi : QBagiP adalah prosedur untuk mendapatkan hasil bagi vektor A oleh B.

Input : vektor penta. Output : vektor penta.

(6)

local L::list: L:=BagiP(A,B): return(op(1,L)); end proc: Contoh: D:=[2,0,1,4,1]: E:=[3,4,1]: QBagiP(D,E); [2,2,0,1,2]

Program 3.10 Sisa Bagi (A mod B)

Deskripsi : RBagiP adalah prosedur untuk mendapatkan sisa bagi A mod B. Input : vektor penta dan integer.

Output : vektor penta.

BagiP:=proc(A::list,B::list) local L::list: L:=BagiP(A,B): return(op(2,L)); end proc: Contoh: A:=[4,4,1,3,1]: B:=[3,0,1,2,1]: RBagiP(A,B); [1,0,3]

Program 3.11 Vektor A Pangkat ke x mod vector B

Deskripsi : PangkatPM adalah prosedur A pangkat ke x mod B. Input : vektor, integer.

Output : vektor.

PangkatPM:=proc(A::list,x::integer,B::list) local H,G,K,L,X::list, i::integer:

X:=convert(x,base,2); G:=A: H:=[1]:

if op(1,X)=1 then H:=G:

end if:

for i from 2 to nops(X) do K:=KaliP(G,G): G:=RBagiP(K,B): if op(i,X)=1 then L:=KaliP(H,G): H:=RBagiP(L,B): end if: end do: return(H);

(7)

end proc:

Contoh:

A:=[1,0,1,2,3]: B:=[1,4,0,2,3,1]: S:=PangkatPM(A,80,B);

S:=[1,4,0,2,3,1]

Program 3.12 FPB dari Vektor A dan Vektor B

Deskripsi : GcdP adalah prosedur untuk mencari FPB dari vektor A dan B. Input : vektor penta.

Output : vektor penta.

GcdP:=proc(A::list,B::list)

local RA,RB,S,T,L::list, i,a,b::integer: a:=nops(A): b:=nops(B):

RA:=A: RB:=B: if a<b then RA:=B: RB:=A: end if:

if RB=[0] then return(RA) end if; L:=RBagiP(RA,RB): RA:=RB: RB:=L: for i while RB<>[0] do L:=RBagiP(RA,RB): RA:=RB: RB:=L: end do: return(RA); end proc: Contoh: A:=[1,0,3,2,1]: B:=[2,4,1]: GcdP(A,B); [4]

Program 3.13 Acak Vektor Penta

Deskripsi : AcakPen adalah prosedur untuk membangkitkan vektor terner pada mod ? secara acak.

Input : integer positif. Output : vektor penta.

AcakPenX:=proc(m::posint)

local AcIn::procedure, p,q,i::integer: AcIn := rand(5^m):

p:=AcIn(): q:=p mod 5:

(8)

p:=AcIn(): q:=p mod 5: end do: UbahDesKePen(p); end proc: Contoh: AcakPen(8); [1,3,0,3,1,2,2,1]

Program 3.14 Menggeser Satu Langkah

Deskripsi : GSatuP adalah prosedur untuk menggeser vektor satu langkah ke kiri.

Input : vektor penta dan integer positif. Output : vektor penta.

GSatuP:=proc(T::list,m::posint) local R,H,L::list, t::integer: L:=DatP[m]: t:=nops(T): if t<m then R:=[0,op(T)]; else R:=[0,op(subsop(m=NULL,T))]: R:=ReduNol(R); H:=KVekP(L,op(t,T)): AdisiP(R,H); end if: end proc: Contoh: m:=12: S:=[1,2,1,3,0,4]: GSatuP(S,m); [0,1,2,3,4,0,4] Program 3.15 Geser Vektor

Deskripsi : GVekP adalah prosedur untuk menggeser vektor Input : vektor penta dan integer positif.

Output : vektor penta.

GVekP:=proc(T::list,s::nonnegint,m::posint) local R,H,K,L::list, d,t,j,x,y,k::integer: L:=DatP[m]:

t:=nops(T): d:=m-t: if s=0 then return(T): elif s=1 then GSatuP(T,m); elif s<=d then

(9)

elif s<m then: R:=[seq(0,i=1..s),seq(op(i,T),i=1..(m-s))]: R:=ReduNol(R); H:=L: k:=(m-s+1): K:=KVekP(H,op(k,T)): R:=AdisiP(R,K): for j while k<t do k:=k+1: H:=GSatuP(H,m): K:=KVekP(H,op(k,T)): R:=AdisiP(R,K): end do: return(R);

else return("Input kedua kegedean") end if; end proc: Contoh: S:=[3,1,0,2,4,1]: m:=12: GVekP(S,3,m); [0,0,0,3,1,0,2,4,1]

Program 3.16 Perkalian Vektor dalam mod ?

Deskripsi : MultiP adalah prosedur untuk perkalian vektor A dan B mod ? . Input : vektor penta dan integer postif.

Output : vektor penta.

MultiP:=proc(A::list,B::list,m::posint) local R,U,V,S,T::list, s,j,t,a::integer: if A=[0] or B=[0] then return([0]) end if; s:=nops(A): t:=nops(B): S:=A: T:=B: if t<s then S:=B: T:=A: a:=s: s:=t: t:=a: end if: R:=KVekP(T,op(1,S)); for j from 1 to (s-1) do T:=GSatuP(T,m): V:=KVekP(T,op(j+1,S)): R:=AdisiP(R,V): end do: return(R); end proc: Contoh: S:=[1,2,1,4,2]: T:=[2,1,0,2,4]: m:=9: MultiP(S,T,m); [2,0,4,1,1,2,2,0,3]

(10)

Pogram 3.17 Invers

Deskripsi : InvP adalah prosedur untuk A-1 mod ? . Input : vektor penta dan integer.

Output : vektor penta.

InvP:=proc(T::list,m::integer)

local QA,QB,RA,RB,R,S,L,Tmp,H::list, i::integer: S:=NegP(DatP[m]):

if T=[0] then return(false) end if: if nops(T)=1 then return(T) end if: RA:=[op(S),seq(0,j=1..(m-nops(S))),1]: RB:=T: QA:=[0]: QB:=[1]: L:=BagiP(RA,RB): RA:=RB: RB:=op(2,L): for i while RB<>[0] do Tmp:=QA: QA:=QB: H:=MultiP(QB,op(1,L),m): R:=NegP(H): QB:=AdisiP(Tmp,R): L:=BagiP(RA,RB): RA:=RB: RB:=op(2,L): end do:

if (RA=[4] xor RA=[1])then H:=KVekP(QB,op(RA)) else H:=KVekP(NegP(QB),op(RA)) end if: return(H); end proc: Contoh: A:=[1,1,1,3,1,3,4,2,3]: m:=15: InvP(A,m); [2,0,1,1,1,2,4,0,3,1,3,4,0,1] Program 3.18 Pembagian Vektor Penta mod ?

Deskripsi : DivP adalah prosedur untuk membagi A oleh B mod ? G Input : vektor penta dan integer.

Output : vektor penta.

DivP:=proc(A::list,B::list,m::integer) local iB::list:

iB:=InvP(B,m); MultiP(A,iB,m);

(11)

end proc: Contoh:

A:=[0,1,1,3,2]: B:=[1,0,1,4,3]: m:=10: DivP(A,B,m);

[2,4,3,1,4,3,3,3,3,1] Program 3.19 Negatif Integer mod ?

Deskripsi : ModI adalah prosedur yang menghitung ? mod ? dalam rentang negatif.

Input : integer. Output : integer.

ModN:= proc(a::integer, n::posint) local b, c::integer: b := a mod n: c := floor(n/2): if b > c then b := -(n-b) end if: return(b): end proc: Contoh: ModN(18,26); -8

Progran 3.20 Eksponen mod ?

Deskripsi : ExpP adalah prosedur untuk Ax mod ? . Input : vektor penta dan integer.

Output : vektor penta.

ExpP:=proc(A::list,x::integer,m::integer) local H,G,X::list, i,p,k,n::integer: p:=5^m-1: k:=ModN(x,p): if k>=0 then X:=convert(k,base,2); G:=A: H:=[1]: if op(1,X)=1 then H:=G: end if:

for i from 2 to nops(X) do G:=MultiP(G,G,m): if op(i,X)=1 then H:=MultiP(H,G,m): end if: end do: else n:=-k:

(12)

X:=convert(n,base,2); G:=InvP(A,m): H:=[1]: if op(1,X)=1 then H:=G:

end if:

for i from 2 to nops(X) do G:=MultiP(G,G,m): if op(i,X)=1 then H:=MultiP(H,G,m): end if: end do: end if: return(H); end proc: Contoh: S:=[1,0,1,3]: m:=14: ExpT(S,20,m); [2,3,3,0,4,2,0,3,2,4,3,1,4] Program 3.21 Vektor A Pangkat ?

Deskripsi : PangkatP adalah prosedur A pangkat ke ? . Input : vektor penta.

Output : vektor penta.

PangkatP:=proc(A::list,x::integer) local H,G,X::list, i::integer: X:=convert(x,base,2);

G:=A: H:=[0]:

if op(1,X)=1 then H:=G:

end if:

for i from 2 to nops(X) do G:=KaliP(G,G): if op(i,X)=1 then H:=KaliP(H,G): end if: end do: return(H); end proc: Contoh: A:=[3,1,2,4]: x:=3: S:=PangkatT(A,x); S:=[2,2,3,0,4,0,1,1,4] Program 3.22 Test Irreducible

(13)

Input : vektor penta. Output : true or false. TestIrrP:=proc(A::list)

local U,H,S,W::list, i,m,a,h::integer: a:=nops(A)-1: m:=floor(a/2): W:=[0,1]: for i from 1 to m do W:=PangkatPM(W,5,A); U:=AdisiP(W,[0,4]): H:=GcdP(U,A): h:=nops(H): if h>1 then return(false); break; end if: end do: return(true); end proc: Contoh: S:=AcakPen(12); S:=[1,0,1,2,1,0,0,4,4,4,0,1] rA:=TestIrrP(S); rA:= true

Program 3.23 Membangkitkan Vektor Irreducible secara Acak Deskripsi : GenIrrP adalah prosedur untuk membangkitkan vektor

irreducible secara acak. Input : integer.

Output : vektor penta.

GenIrrP:=proc(m::posint)

local X,Y,T::list, x,i::integer: X:=AcakPenX(m-1); x:=nops(X); Y:=[op(X),seq(0,j=1..(m-x)),1]: T:=TestIrrP(Y);

for i while T=false do

X:=AcakPenX(m-1); x:=nops(X); Y:=[op(X),seq(0,j=1..(m-x)),1]: T:=TestIrrP(Y); end do: return(Y); end proc: Contoh: GenIrrP(15); [4,3,0,2,1,0,4,3,3,1,4,0,1,1,0,1]

(14)

Program 3.24 Test Primitif

Deskripsi : TestPrimP adalah prosedur untuk test primitif Output : true or false.

TestPrimP:=proc(A::list)

local H::list, F::anything, i,m,a,h,k::integer: m:=nops(A)-1: h:=5^m-1: F:=ifactor(h); a:=nops(F); for i from 1 to a do k:=h/op(op(1,op(i,F))): H:=PangkatPM([0,1],k,A): if H=[1] then return(false); break; end if: end do: return(true); end proc: Contoh: S:=GenIrrP(3); S:=[2,3,0,1] pA:=TestPrimP(S); true

Program 3.25 Prima Relati Acak

Deskripsi : PrimaRelAcak adalah Prosedur untuk membangkitkan bilangan prima relatif modulo ?? ? ? secara acak.

Input : integer positif. Output : integer positif.

PrimaRelAcakP:=proc(m::posint)

local AcIn::PrimaRelAcakP, g,i,R,p::integer: p:=5^m-1: AcIn := rand(p): R:=AcIn(): g:=gcd(R,p): for i while g<>1 do R:=AcIn(): g:=gcd(R,p): end do: return(R): end proc: Contoh: m:=7: PrimaRelAcakP(m); 58423

(15)

Progran 3.26 Membangkitkan Semua Vektor Irreducible Berderajat ?

Deskripsi : GenIrrDmP adalah Prosedur untuk membangkitkan semua vektor irreducible bederajat ? G

Input : integer positif. Output : integer positif.

GenIrrDmP:=proc(m::posint)

local X,Y::list, H::set, T::symbol, i,x::integer: H:={}: for i from 1 to 5^(m-1) do if (i mod 5)<>0 then X:=UbahDesKePen(i); x:=nops(X); Y:=[op(X),seq(0,j=1..(m-x)),1]: T:=TestIrrP(Y); if T=true then H:={op(H),Y}: end if: end if: end do: return(H); end proc: Contoh: GenIrrDmT(3); {[1,1,0,1],[4,2,0,1],[3,4,0,1],[2,4,0,1],[2,3,0,1], [4,1,0,1],[3,3,0,1],[1,2,0,1]}}

(16)

Lampiran 3 Program Birthday Paradox > BirthdayParadox:=proc(n::integer,k::integer) local p::integer: p:=1-product((n-(i-1))/n, i=1..k ); evalf(p): end proc: > Contoh : > BirthdayParadox(365,23); 0.5072972343

(17)

Lampiran 4 Algoritme penunjang algoritme Index-Caculus untuk menentukan

solusi masalah logaritma diskret pada ? ? ??? ??

Algoritme 4.1 Mengubah Vektor ke Polinomial (UbahVekPoli)

Input : Vektor N = [??? ?? ?g ????

Output : Polinomial (D)

Langkah- langkah:

1. D1 = Petakan ? ke ?? pangkat ? pada [barisan ?, ? ? ? sampai (banyaknya elemen vektor N dikurangi 1)]

2. D2 = [barisan (N[?? ? ? ??], ? ? ? ??•???(banyaknya elemen N)] 3. D = add(?, ? ? D2)

4. Return (D)

Algotitme 4.2 Memisahkan Polinomial dengan Pangkatnya (EkstrakP)

Input : Integer ? dan vektor B = [??????g ????

Output : Vektor [[H], [Q], acak]

Langkah- langkah: 1. R = [] 2. ? ? ?? ? ?

3. Roll = rand(dari 1 sampai ? ? ? ) 4. Acak = roll()

5. E = Gunakan algoritme MultiP modulo ? dengan input vektor B, dan (ExpP([0,1]) modulo ? , integer acak)

6. N = Gunakan algoritme UbahPenKeDes dengan input vektor E (Algoritme 4.1)

7. F = Faktorkan N dalam modulo 5 8. ? ? type? ? ????

9. Jika ? = true maka R= [operan F] 10. U = [elemen R]

11. X = array (1 sampai banyaknya elemen U) 12. Y = array (1 sampai banyaknya elemen U)

11.1 Jika ? dari 1 sampai banyaknya elemen U, lakukan: 11.1.1 H = elemen ke-? dari U

11.1.2 ? ? type (H, ‘^’) 11.2 Jika ? ? true maka

11.2.1 C = Konpersi H ke list 11.2.3 J = Elemen ke-1 dari C 11.2.4 Q = Elemen ke-2 dari C 11.2.5 X[?] = J

(18)

11.2.6 Y[?] = Q 11.3 Selainnya 11.3.1 J = H, Q = 1 11.3.2 X[i] = J, Y[i] = 1 13. L = Konpersi X ke list 14. M = Konpersi Y ke list 15. Return( L, M, acak)

16. Selainnya jika banyaknya elemen F sama dengan 2 dan type(F, ‘^’) = true, maka

16.1 R = elemen ke-1 dari F 16.2 Q = elemen ke-2 dari F 1.6.3 Return (R, Q, acak)

Algoritme 4.3 Eksrak Matriks (EkstrakMP)

Input : Vektor M = [? ??? ??g ?? ?? dan array S

Output : Vektor ([Z1, ??]) Langkah- langkah:

1. ? ? elemen ke-3 dari M

2. M1 = {elemen(elemen ke-1 dari M)} 3. M2 = elemen ke-2 dari M

4. A = Konpersi S ke list 5. L = {elemen (A)} 6. J = M1 subset L 7. Jika J = true, maka

7.1 Z = array (1 sampai banyaknya elemen L)

7.2 Untuk ? dari 1 sampai banyaknya elemen L, lakukan: 7.2.1 Z[?] = 0

7.3 Untuk ? dari 1 sampai banyaknya elemen M1, lakukan: 7.3.1 ? ? Elemen ke-? dari M1

7.3.2 Untuk ? dari 1 selama ? ? ? , lakukan:

7.3.2.1 ? ? Elemen ke-? dari A

7.3.2.2 Z[? ? ? ] = Elemen ke-? dari M2 7.4 Z1 = Konpersi Z ke list

7.5 Selainnya Z1 = [], ? ? [] 8. Return (Z1, ?)

(19)

Lampiran 5 Faktorisasi Prima

Tabel 28 Faktorisasi Prima Order ? ? ??? ??

? Order(? ) Faktor Prima

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 124 624 3124 15624 78124 390624 1953124 9765624 48828124 244140624 1220703124 6103515624 50517578124 15257890624 762939453124 3814697265624 19073486328124 953674316406624 474837158203124 2384185791015624 11920928955078124 59604644775390624 298023223876953124 1490116119384765624 7450580596923828124 37252902984619140624 186264514923095703124 931322574615478515624 4656612873077392578124 23283064365386962890624 (2)3(31) (2)4(3)(13) (2)2(11)(71) (2)3(3)2(7)(31) (2)2(19531) (2)5(3)(13)(313) (2)2(19)(31)(829) (2)3(3)(11)(71)(521) (2)3(12207031) (2)4(3)2(7)(13)(31)(601) (2)2(305175781) (2)3(3)(29)(449)(19531) (2)2(11) (31)(71)(181)(1741) (2)6(3)(13)(17)(313)(11489) (2)2(409)(466344409) (2)3(3)3(7)(19)(31)(829)(5167) (2)2(191)(3981071)(6271) (2)4(3)(11)(13)(41)(71)(521)(9161) (2)2(31)(379)(519499)(19531) (2)3(3)(23)(67)(12207031)(5281) (2)2(332207361361)(8971) (2)5(3)2(7)(13)(31)(313)(601)(390001) (2)2(11) (71)(101)(251)(401)(9384251) (2)3(3)(305175781)(38923)(5227) (2)2(19)(31)(109)(271)(829)(31051)(4159) (2)4(3)(13)(29449)(234750601)(19531) (2)2(59)(22125996444329)(35671) (3)3(2)2(7)(11)(31)(61)(71)(181)(521)(7621)(1741) (2)2(6255525084773588471)(1861) (2)7(3)(13)(17)(313)(29423041)(11489)(2593)

(20)

Lampiran 6 Program Solusi Masalah Logaritma Diskret pada ? ? ??? ?? Implementasi program menggunakan software Maple 11.

Program 7.1 Exhaustive search (Pelacakan Lengkap)

Deskripsi : Pelaclog adalah prosedur untuk menentukan solusi logaritma diskret pada ? ? ??? ?? dengan algoritme Pelecakan lengkap. Input : vektor penta B dan integer ? .

Output : integer ? .

Pelaclog:=proc(B::list,m::posint) local A::list, i,x::integer: A:=[0,1]: x:=1:

for i from 1 while A<>B do A:=MultiP(A,[0,1],m): x:=x+1: end do: return(x): end proc: Contoh : m:= 12: B:= [2,1,1,2,3,0,2,2,3,1,4,4]: Pelaclog(B,m); 1578

Program 7.2 Pelacakan Lengkap Umum

Deskripsi : PelaclogUmum adalah prosedur untuk menentukan solusi logaritma diskret pada ? ? ??? ?? dengan sebarang basis. Input : vektor penta B, T dan integer ? .

Output : integer x.

PelaclogUmum:=proc(T::list,B::list,m::posint) local A::list, i,x::integer:

A:=T: x:=1:

for i from 1 while A<>B do A:=MultiP(A,T,m): x:=x+1: end do: return(x): end proc: Contoh: m:=7: A:=[0,1]; B:=[4,3,1,1,2,1]; PelaclogUmum(A,B,m); 58400

(21)

Program 7.3 Pelacakan Lengkap Negatif

Deskripsi : PelacNeg adalah prosedur untuk menentukan solusi logaritma diskret pada ? ? ??? ?? dengan algoritme pelacakan lengkap

Negatif .

Input : vektor pentaner B dan integer ? . Output : integer ? .

PelacNeg:=proc(B::list,m::integer) local p,n,x,i,y::integer, H,A::list: p:=5^m-1:

n:=p/2: H:=NegP(B): A:=[0,1]: x:=1:

for i from 1 while A<>H do A:=MultiP(A,[0,1],m): x:=x+1: y:=x+n mod p: if A=B then return(x); break; end if; end do: return(y): end proc: Contoh m:=8; B:=[1,3,4,4,4,0,0,1]; PelacNeg(B,m); 4587

Program 7.4 Baby-Step Giant-Step 1 Tahap Baby-step :

Deskripsi : Tahap Baby-step untuk menyimpan nilai ? pada ? ? ??? ?? Input : integer ? , ? ? ? , ? ? ?? ??G

Output : array DatPG. DatPG:=array(1..5^m-1): X:=ExpP([0,1],a-1,m):

for i from 1 to (b-a+1) do X:=MultiP([0,1],X,m): h:=UbahPenKeDes(X): DatPG [h]:=(a-1)+i: end do:

(22)

Tahap Giant-step 1:

Deskripsi : BabyGiant1P yaitu prosedur untuk menentukan solusi logaritma diskret pada ? ? ??? ?? dengan algoritme Baby-step Giant-step1. Input : vektor penta P dan integer ? , ? , array pada tahap Baby-step. Output : integer x.

BabyGiant1P:=

proc(T::list,m::posint,n::integer,S::array)

local p,i,j,h,s,k::integer, K,H::list, t::anything: p:=5^m-1: K:=ExpP([0,1],-n,m); H:=T: s:=UbahPenKeDes(H); t:=S[s]; k:=t: j:=1:

for i from 1 while type(t,'indexed') do H:=MultiP(H,K,m): s:=UbahPenKeDes(H); t:=S[s]; j:=j+1: k:=((n*(j-1))+t) mod p : end do: return(k); end proc: Contoh m:=9: b:=1398: P:=[2,1,1,4,2,3,3,4,4]; x:=BabyGiant1P(P,m,b,DatPG9); 5643

Program 7.5 Baby-Step Giant Step 2 Tahap Baby-step :

Deskripsi : Tahap Baby-step untuk menyimpan nilai ? pada ? ? ??? ?? Input : integer ? ?? ?? G

Output : array DatPM. DatPM:=array(1..5^m-1): X:=ExpP([0,1],a-1,m):

for i from 1 to (b-a+1) do X:=MultiP([0,1],X,m): h:=UbahPenKeDes(X): DatPM [h]:=(a-1)+i: end do:

(23)

Tahap Giant-step 2:

Deskripsi : BabyGiant2P yaitu prosedur untuk menentukan solusi logaritma diskret pada ? ? ??? ?? dengan algoritme Baby-step Giant-step 2. Input : vektor penta P dan integer ? G

Output : integer x. BabyGiant2P:=

proc(T::list,m::posint,n::integer,S::array)

local p,i,j,h,s,k::integer, K,H::list, t::anything: p:=5^m-1: K:=ExpP([0,1],-n,m); H:=T: s:=UbahPenKeDes(H); t:=S[s]; k:=t: j:=1:

for i from 1 while type(t,'indexed') do H:=MultiP(H,K,m): s:=UbahPenKeDes(H); t:=S[s]; j:=j+1: k:=((n*(j-1))+t) mod p : end do: return(k); end proc: Contoh m:=11: P:=[1,2,3,1,3,3,2,3,3,1]; x:=BabyGiant2P(P,m,DatPM11); 43284

Program 7.6 Baby-Step Gian- Step 3 Tahap Baby-step :

Menggunakan simpanan pada Baby-step Giant-step 2. Tahap Giant- step 3 :

BabyGiant3P:=

proc(T::list,m::posint,n::integer,S::array)

local p,i,j,h,s,k::integer, K,H::list, t::anything: p:=5^m-1: K:=ExpP([0,1],-n*m,m); H:=T: s:=UbahPenKeDes(H); t:=S[s]; k:=t: j:=1:

(24)

for i from 1 while type(t,'indexed') do H:=MultiP(H,K,m): s:=UbahPenKeDes(H); t:=S[s]; j:=j+1: k:=(n*m*(j-1)+t) mod p: end do: return(k); end proc: Contoh m:=12; P:=[3,4,4,3,0,0,3,4,1,3,4,1]; GiantStep3P(P,m,5,DatPM12); X=53284

Program 7.7 Baby-Step Giant-Step 4 Tahap Baby-step :

Deskripsi : tahap Baby-step untuk menyimpan nilai ? pada ? ? ??? ?? Input : integer ? ? ? ?? .

Output : array DatTF. DatPR:=array(1..5^m-1): X:=ExpP([0,1],a-1,m):

for i from 1 to (b-a+1) do X:=MultiP([0,1],X,m): h:=UbahPenKeDes(X): DatPR[h]:=(a-1)+i: end do: save DatPR,"d:\\programMaple\\DatPR.m"; Tahap Giant-step 4 :

Deskripsi :BabyGiant4P yaitu prosedur untuk menentukan solusi logaritma diskret pada ? ? ??? ?? dengan algiritme Baby-step Giant-step4. Input : vektor pentaner P dan integer ? ?? , array pada tahap Baby-step. Output : integer x.

BabyGian4P:=

proc(T::list,m::posint,n::integer,S::array)

local p,i,j,h,s,k::integer, K,H::list, t::anything: p:=5^m-1: K:=ExpP([0,1],-n,m); H:=T: s:=UbahPenKeDes(H); t:=S[s]; k:=t: j:=1:

(25)

H:=MultiP(H,K,m): s:=UbahPenKeDes(H); t:=S[s]; j:=j+1: k:=((n*(j-1))+t) mod p : end do: return(k); end proc: Contoh m:=18: b:=1280000: P:=[1,3,2,4,3,3,1,1,2,4,2,1,3,4,4,4,0,2]; x:=BabyGiant4P(P,m,b,DatPR18); 2013438726562

Program 7.8 Fungsi Partisi Penunjang Algoritme Pollard Rho

Deskripsi : FPolardP adalah prosedur untuk mempartisi fungsi iterasi. Input : vektor penta A, B dan integer ? G

Output : vektor penta.

FPolardP:=proc(L::list,A::list,B::list,m::posint) local a,b,q,h,u::integer, H::list:

q:=(5^m-1):

H:=op(nops(H),L): a:=op(2,L): b:=op(3,L): h:=op(1,H) mod 5: if h=0 then H:=MultiP(H,A,m): a:=(a+1) mod q: elif h=1 then H:=MultiP(H,B,m): b:=(b+1) mod q: else H:=MultiP(H,H,m): a:=(2*a) mod q: b:=(2*b) mod q: end if: return([H,a,b]); end proc: Contoh: M:=14: P:=5^m-1: H:=[[1],0,0]: a:=[0,3,1]: b:=[4,4,1]: FPolard(H,a,b,m); [[4,4,1],0,1]

(26)

Program 7.9 Prima Relatif Acak Penunjang Algoritme Pollad Rho

Deskripsi : PrimaReAcak adalah membangkitkan bilangan prima relatif modulo 5^m-1 secara acak

Input : vektor penta A, B dan integer ? G Output : vektor penta.

PrimaRelAcakP:=proc(m::posint)

local AcIn::PrimaRelAcakP, g,i,R,p::integer: p:=5^m-1: AcIn := rand(p): R:=AcIn(): g:=gcd(R,p): for i while g<>1 do R:=AcIn(): g:=gcd(R,p): end do: return(R): end proc: Contoh: m:=11; A:=PrimaRelAcakP(m); A=20544909

Program 7.10 Pollard Rho

Deskripsi : AlgPolardP adalah prosedur untuk menentukan solusi logaritma diskret pada ? ? ??? ??

Input : vektor penta P dan integer ? ?? . Output : integer ? .

AlgPolardP:=proc(T::list,n::integer,m::posint)

local i,aM,bM,aL,bL,q,r,s,u::integer, Hm,Hl,G::list, L,M::list: q:=5^m-1: G:=ExpP([0,1],n,m): M:=[[1],0,0]: M:=FPolardP(M,G,T,m): L:=M: Hm:=op(1,M): L:=FPolardP(L,G,T,m): Hl:=op(1,L): for i while Hm<>Hl do M:=FPolardP(M,G,T,m): Hm:=op(1,M): L:=FPolardP(L,G,T,m): L:=FPolardP(L,G,T,m): Hl:=op(1,L): end do: aM:=op(2,M): bM:=op(3,M): aL:=op(2,L): bL:=op(3,L): r:=(bM-bL) mod q: if r=0 then return(FAIL); else

(27)

s:=(aL-aM) mod q: u:=n*(s/r) mod q; return(u); end if: end proc: Contoh m:=14: Y:=[1,1,1,2,2,0,2,1,3,0,0,3,0,1] n:= PrimaRelAcakP(m); n:=1214072539 c:=AlgPolardP(Y,n,m); c:=4584697796 Program 7.11 Pohlig-Hellman

Deskripsi : LogPolhigHelman adalah prosedur untuk menentukan solusi logaritma diskret pada ? ? ??? ??

Input : vektor penta B dan integer ? ?? G Output : integer x. LogPolhigHelman:=proc(B::list,m::posint) local i,n,r,q,t,l,u,j,k,R,c,f,v,p1,ff,f1,p0::integer,P,s::any thing, g,G,xA,xB,X,Y,T,iG,bG,a,b,d,z,cek::list, y::symbol: y:=type(m,even); f:=5^m-1; ff:=ifactor(f): p0:=op(1,ff); p1:=op(2,p0); if p1=2 then f1:=2: elif p1=3 then f1:=24: elif p1=4 then f1:=4: elif p1=5 then f1:=8: elif p1=6 then f1:=16: elif p1=7 then f1:=32: else f1:=64: end if: n:=(f)/f1: P:=ifactor(n): r:=nops(P):

(28)

X:=[seq(0*i,i=1..r)]: Y:=[seq(0*i,i=1..r)]: for i from 1 to r do s:=op(i,P); q:=op(op(1,s)); if nops(s)=1 then t:=1: else t:=op(2,s); end if: g:=[1]: l:=0: u:=n/q: xA:= ExpP([0,1],u,m); for j from 0 to (t-1) do if j=0 then k:=0: else k:=R*(q^(j-1)): end if: T:=ExpP([0,1],k,m); G:=MultiP(g,T,m): iG:=InvP(G,m): bG:=MultiP(iG,B,m): xB:=ExpP(bG,(n/(q^(j+1))),m); R:=NaiflogUmum(xA,xB,m); l:=l+(R*(q)^j); end do: X[i]:=l; b:=(q^j); Y[i]:=b: end do: a:=X; d:=Y; c:=chrem(a,d); if y=true then cek:=ExpP([0,1],c,m); if cek<>B then c:=c+(n/2); end if: else for v from 1 to f1 do z:=ExpP([0,1],c,m); if z=B then c:=c: else c:=c+n: end if: end do: end if: return(c);

(29)

end proc: Contoh : m:=15: B:=[0,2,3,0,3,0,0,2,4,1,4,3,0,0,4]; LogPolhigHelman(B,m); 65321971

Program 7.12 Menyimpan Polinomial Basis Penunjang Algoritme Index- Calculus Basis2:=array(1..7): S:=GenIrrDmP(2); M:=op(2,S); L:=UbahVekKePoli(M); Basis2[7]:=L;

save Basis2, "d:\\programMaple\\Basis2.m"; print(Basi6);

Program 7.13 UbahVekKePoli Penunjang Algoritme Index-Calculus Deskripsi : UbahVekKePoli adalah prosedur untuk mengubah vektor ke polinomial.

Input : vektor penta N. Output : polinomial. UbahVekKePoli:=proc(N::list) local D1,D2,D::list: D1:=map(x -> x1^x,[seq(i,i=0..(nops(N)-1))]); D2:=[seq(N[j]*D1[j],j=1..nops(N))]; D:=add( i, i=D2 ); return(D): end proc: Contoh: N:=[3,0,0,4,1,0,0,0,2,2,2,2,4,0,2,4,4,2,0,3]; UbahVekKePoli(N); 3+4x13+x14+2x18+2x19+2x110+2x111+4x112+2x114+4x115+ 4x116+2x117+3xl19

Program 7.14 EkstrakP Penunjang Algoritme Index-Calculus

Deskripsi : EkstrakP adalah prosedur untuk memisahkan polinomial dan pangkatnya dari faktor yang dibangkitkan secara acak dari ??. Input : integer ? dan vektor P.

Output : polinomial, pangkat, integer. EkstrakP:=proc(m::integer,B::list)

local R,E,N,F,U,X,Y,H,V,C,J,Q,L,M::list, n,roll,acak,i::integer, w,v::symbol: R:=[]:

(30)

n:=5^m-1; roll := rand(1..n-1): acak:=roll(); E:=MultiP(B,(ExpP([0,1],acak,m)),m); N:=UbahVekKePoli(E); F:=Factor(N) mod 5; w:=type( F, `*` );

if w=true then R:=[op(F)]; U:=[op(R)];

X:=array(1..nops(U)): Y:=array(1..nops(U)):

for i from 1 to nops(U) do H:=op(i,U); v:=type( H, `^` ); if v=true then C:=convert(H, `list`); J:=op(1,C); Q:=op(2,C); X[i]:=J; Y[i]:=Q; else J:=H; Q:=1; X[i]:=J; Y[i]:=Q; end if: end do: L:=convert(X, `list`); M:=convert(Y, `list`); return(L,M,acak); else

if nops(F)=2 and type( F, `^` )= true then R:=[op(1,F)]; Q:=[op(2,F)]; return(R,Q,acak); else R:=[F]; Q:=[1]; return(R,Q,acak); end if: end if: end proc: Contoh: m:=18; M:=[EkstrakP(m,[1])]; M:=[[3,x112+3x111+3x19+x18+4x17+3x15+3x13+2x12+3x1+3,1+x1, x12+2x1+4],[1,1,2,2],464554880040]

(31)

Program 7.15 EkstrakMP Penunjang Algoritme Index-Calculus

Deskripsi : EkstrakMP adalah prosedur untuk menyesuaikan letak pangkat yang bersesuaian dengan faktor basis.

Input : vektor penta M, faktor basis S. Output : polinomial, pangkat, integer. EkstrakMP:=proc(M::list,S::array)

local M2,A,list,Z1::list, i,m,f,r::integer, M1,L::set, J,Z::symbol, a,b::anything: r:=[op(3,M)]; M1:={op(op(1,M))}; M2:=(op(2,M)); A:=convert(S, `list`): L:={op(A)}; J:= M1 subset L; if J=true then Z:=array(1..nops(L)):

for i from 1 to nops(L) do Z[i]:=0;

end do:

for m from 1 to nops(M1) do b:=op(m,M1);

for f from 1 while a <> b do a:=op(f,A); end do: Z[f-1]:=op(m,M2); end do: Z1:=convert(Z, `list`): else Z1:=[]; r:=[]; end if: return(Z1,r); end proc: Contoh: m:=9: L:=[x1,x1+2,3+x1,2+x12,3+x12]: B:=[0,1,2,3,0,2,0,2]; MC:=[EkstrakP(m,B)]; MC:=[[4,x16+3x14+x12+2,2+x12],[1,1,1],1717663] A:=EkstrakMP(MC,L); A:=[],[] Ket : L:=[x1,x1+2,3+x1,2+x12,3+x12: Dismpan dalam bentuk array.

(32)

Program 7.16 Algoritme Index-Calculus

Deskripsi : IndCalP adalah prosedur untuk menentukan solusi masalah logaritma diskret pada ? ? ??? ??.

Input : vektor penta M, integer ? , faktor basis ? . Output : polinomial, pangkat, integer.

with(LinearAlgebra): IndCalP:=proc(B::list,m::integer,L::array) local n,Hasil,RS,rS,i,j::integer, Cek,SS,a,CC,MM,BB,PP,C,N,V,A,M,T,H,Q::list, P,t,S,SH::anything, SB::symbol: n:=5^m-1; Q:=[op(convert(L, `list`))];

for j from 1 while RS<>nops(Q) do H:=[];

T:=[];

for i from 1 while nops(H)<>nops(Q) do M:=[EkstrakP(m,[1])];

A:=[EkstrakMP(M,L)];

if A <> [[], []] and SB=false then H:=[op(H),op(1,A)]:

T:=[op(T),op(op(2,A))]: SH:= Matrix(H):

rS:=Rank(SH); end if:

SB:={op(1,A)} subset {op(H)}; end do: V:=H; N:= map(x->(x mod n),T); S := Matrix(V): RS:=Rank(S); end do: t := Vector(N): P:=LinearSolve(S, t, method='modular'); C:=convert(P, `list`); PP:=map(x->(x mod n),C); BB:=B;

for j from 1 while Cek<>BB do MM:=[EkstrakP(m,B)];

CC:=[EkstrakMP(MM,L)]; if CC <> [[], []] then a:=op(1,CC);

SS:=[seq((op(i,a)*op(i,PP)) mod n,i=1..nops(a))]; Hasil:=(add( i, i=SS )-op(op(2,CC))) mod n;

Cek:=ExpP([0,1],Hasil,m); end if:

end do:

return(Hasil); end proc:

(33)

Contoh: m:=9: L:=[x1,x1+2,3+x1,2+x12,3+x12 B:=[0,2,4,1,4,3,2,3]; IndCalP(B,m,L); 821565

Gambar

Tabel 27 Daftar polinomial primitif  ? ? ?? ? ?
Tabel 28  Faktorisasi Prima Order  ? ? ?? ? ? ?

Referensi

Dokumen terkait

Hanya ALTOVA dan Visual Studio yang dapat mendeteksi ketidakvalidan dari element yang berperan sebagai referential integrity antara complexType dengan tipe sama tetapi berbeda

Penelitian ini dilakukan untuk menggali lebih dalam bagaimana lingkungan budaya Tionghoa yang dimiliki oleh pemimpin perusahaan yang dapat dikatakan orang Tionghoa Jiaosen

Sejak Abad Pertengahan, orang Kristen memiliki tradisi menggunakan ”Adven Wreath” (Lilin Adven), yaitu rangkaian lima lilin dan tumbuh-tumbuhan hijau yang membentuk

Menyatakan bersedia / tidak bersedia untuk menerima mahasiswa DIII Kebidanan Sekolah Tinggi Ilmu Kesehatan Muhammadiyah Gombong atas nama Ani Susanti, NIM B1301020

Di satu sisi SKB 3 Menteri itu dipandang sebagai pengakuan yang lebih nyata terhadap eksistensi madrsah dan sekaligus merupakan langkah strategis menuju tahapan integrasi

Ceritakan pada mereka berkenaan dengan pembeli yang mendapat keputusan cepat apabila menggunakan produk yang anda jual itu.. Follow

Responden yang menjawab sangat setuju untuk pernyataan positif adalah yang terbanyak yaitu pernyataan “Cara mengonsumsi buah yang paling baik yaitu dimakan dalam

Berdasarkan hasil distribusi frekuensi motivasi, analisis motivasi konsumen membeli kubis segar di Pasar Pasir Gintung memiliki motivasi dengan kriteria tinggi