C - String Prima
Author: Jeffrey WijayaDengan panjang string tidak lebih dari 100 dan bilangan prima lebih kecil dari 1000 (maks. 3 digit), soal ini bisa diselesaikan dengan bruteforce. Cukup uji nC3 angka yang bisa dibentuk dari teks yang diberikan. Untuk mengatasi jika bilangan prima terbesar adalah 1 atau 2 digit, tambahkan dua angka nol di depan teks yang diberikan.
11 peserta berhasil menyelesaikan soal ini.
Solusi C/C++
oleh Eko Wibowo
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
bool isprime(int x)
{
if ( x == 2 ) return true;
if ( x < 2 ) return false;
for ( int i = 2; i * i <= x; i++ )
if ( x % i == 0 ) return false;
return true;
}
int main()
{
int T;
char s[200];
s[0] = s[1] = '0';
scanf( "%d", &T );
while ( T-- )
{
int ans = -1;
scanf( "%s", s + 2 );
int len = strlen(s);
for ( int i = 0; i < len; i++ )
for ( int j = i + 1; j < len; j++ )
for ( int k = j + 1; k < len; k++ ) {
int temp = (s[i]-'0') * 100 + (s[j]-'0') * 10 + s[k] -'0';
if ( isprime(temp) ) ans = max(ans,temp);
}
printf( "%d\n", ans );
}
return 0;
}
Solusi PASCAL
oleh Eko Wibowo
function isprime(x: longint): boolean;
var
i: longint;
begin
if ( x = 2 ) then
begin
isprime := true;
exit;
end;
if ( x < 2 ) then
begin
isprime := false;
exit;
end;
i := 2;
while ( i * i <= x ) do
begin
if ( x mod i = 0 ) then
begin
isprime := false;
exit;
end;
i := i + 1;
end;
isprime := true;
end;
var
T, i, j, k, res, len, temp: longint;
s: string;
begin
readln(T);
while ( T > 0 ) do
begin
T := T - 1;
readln(s);
s := '00' + s;
len := length(s);
res := -1;
for i := 1 to len do
for j := i + 1 to len do
for k := j + 1 to len do
begin
temp := ord(s[i]-'0') * 100 + ord(s[j]-'0') * 10 + ord(s[k]-'0');
if ( temp > res ) and isprime(temp) then res:=temp;
end;
writeln(res);
end;
end.