PRIMA + PRIMA = PRIMA
Diberikan N buah bilangan prima berbeda P1, P2, P3, …, PN. Tentukan apakah ada sepasang bilangan prima Pi dan Pj dengan i ? j, yang apabila dijumlahkan akan menjadi bilangan prima juga.
Batasan :
Format Input :
Baris 1 : Sebuah bilangan N
Baris 2 : P1, P2, P3, …, PN Format Output : ADA / TIDAK ADA (sesuai deskripsi di atas)
Format Output :
ADA / TIDAK ADA (sesuai deskripsi di atas)
Sample input dan output :
|
5 |
ADA |
|
5 |
TIDAK ADA |
Keterangan :
Pada sample pertama, ada sepasang bilangan prima 11 and 2 yang apabila dijumlahkan adalah 13 yang juga merupakan bilangan prima.
Pada sample kedua, tidak ada sepasang bilangan prima yang apabila dijumlahkan menjadi bilangan prima lainnya.
Idenya adalah mencari twin prime
prime1 + prime2 = prime, hanya jika prime1 atau prime2 nilainya 2.
Ini kode saya bikin silahkan di otak atik sendiri biar lebih ngerti http://ideone.com/HmJvc3
function prima(x:longint) :boolean;
var i:longint;
prime:boolean;
begin
prime:=true;
if (X<=1) then begin
prime:=false;
end;
for i:=2 to X-1 do begin
if (X mod i) = 0 then begin
prime:=false;
end;
end;
prima:=prime;
end;
var
i,j,k,x,y,z,n,b:longint;
a:array[1..100000] of longint;
adatidak:boolean;
begin
readln(n);
j:=1;
adatidak:=false;
for i:=1 to n do begin
read(x);
if (prima(x)) then begin
a[j] := x;
inc(j);
end;
end;
for i:=1 to j-1 do begin
for k:=1 to j-1 do begin
if (k<>i) then begin
if (prima(a[i]+a[k])) then begin
adatidak:=true;
end;
end;
end;
end;
if (adatidak) then begin
writeln('ADA');
end else begin
writeln('TIDAK ADA');
end;
end.
Kalau saya sih begini..
Masuk untuk menulis jawaban
function primeCheck (var x : longint) : boolean;
var
i : longint;
begin
i := 2;
if (x = 1) then begin
primeCheck := False;
end else while (sqr(i) <= x) do begin
if (x mod i = 0) then begin
primeCheck := False;
break;
end else begin
primeCheck := True;
end;
i := i + 1;
end;
end;
var
i,N,temp: longint;
P: array [1..100000] of longint;
ada_ga : boolean;
begin
readln(N);
ada_ga := False;
for i := 1 to N do begin
read (P[i]);
end;
for i := 1 to N do begin
temp := P[i] + 2;
if (primeCheck(temp) = True) then begin
ada_ga := True;
break;
end;
end;
if (ada_ga = True) then begin
writeln ('ADA');
end else begin
writeln ('TIDAK ADA');
end;
end.
uses crt;
var p : array[1..1000] of integer;
i,j,n,x,y,z,a,b : integer;
begin
clrscr;
y := 0;
z := 0;
readln(n);
for i := 1 to n do
begin
readln(p[i]);
end;
for j := 1 to n do
begin
for i := 1 to trunc(sqrt(p[i] + p[i+1])) do
if ((p[i]+p[i+1]) mod i) = 0 then
y := y + 1;
if y = 1 then
z := z + 1
end;
if z > 0 then
write('ADA')
else if z = 0 then
write('TIDAK ADA');
readln;
end.
variabel dari a,b,x tidak digunakan. dan juga menurut saya pada perulangan j hanya perlu hingga n-1 karna jika pada kasus n maka p[i+1] akan melewati dari total input. dan juga deklarasi y menurut saya lebih baik digunakan setelah perulangan for j:= 1 to n-1 agar saat perulangan, nilai dari y kembali ke 0. CMIIW