DAYNT.INP | DAYNT.OUT |
3 12 13 17 9 3 1 12 |
3 13 17 |
CONST fi = 'DayNT.inp';
fo = 'DayNT.out';
Var D : Array[2..32000] of byte;
i,n,k,a : integer;
Procedure mofile;
begin
assign(input,fi);
reset(input);
assign(output,fo);
rewrite(output);
end;
Function Nto( n : integer): boolean;
var i :integer;
begin
if n<2 then exit(false)
else
for i:=2 to trunc(sqrt(n)) do
if n mod i =0 then exit(false);
exit(true);
end;
Procedure Doc_xuly;
begin
readln(k);
for i :=1 to 32000 do d[i] :=0;
while not seekeof do
begin
readln(a);
if nto(a) then d[a] :=1;
end;
end;
Procedure xuat;
begin
n:=0;
for i :=1 to 32000 do
if d[i]<> 0 then
begin write(i,' ');
n := n+1;
if n = k then exit;
end;
end;
Begin
mofile;
Doc_xuly;
xuat;
end.
Procedure Doc_xuly;
begin
readln(k);
for i :=1 to 32000 do d[i] :=0;
while not seekeof do
begin
readln(a);
if nto(a) then d[a] :=1;
end;
end;
Với cách xử lý như trên ta thấy code vừa gọn, tối ưu được thuật toán và bộ nhớ.
const fi='DAYNT.inp';
fo='DAYNT.out';
var f:text;
n,i,j,m:longint;
k:array[0..32767] of boolean;
a,b:array[1..10000000] of longint;
procedure docf;
begin
assign(f,fi);
reset(f);
n:=0;
readln(f,m);
while not eof(f) do
begin
inc(n);
readln(f,b[n]);
end;
close(f);
end;
function nt(i:longint):boolean;
var j:longint;
begin
nt:=false;
if i=1 then exit;
if i=0 then exit;
for j:=2 to trunc(sqrt(i)) do if i mod j=0 then exit;
nt:=true;
end;
procedure td(var a,b:longint);
var tg:longint;
begin
tg:=a;a:=b;b:=tg;
end;
procedure qs(l,r:longint);
var x,i,j:longint;
begin
x:=a[(l+r)div 2];
i:=l;j:=r;
repeat
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
td(a[i],a[j]);
inc(i);dec(j);
end;
until i>j;
if l<j then qs(l,j);
if i<r then qs(i,r);
end;
procedure xd;
begin
for i:=1 to n do if not k[b[i]] then
begin
k[b[i]]:=true;
if nt(b[i]) then
begin
inc(j);
a[j]:=b[i];
end;
end;
end;
begin
docf;
assign(f,fo);
rewrite(f);
xd;
qs(1,j);
for i:=1 to m do write(f,a[i],' ');
close(f);
end.
#Hàm Kiểm tra nguyên tố.
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
# Đọc dữ liệu vào từ file DAYNT.INP
with open("DAYNT.INP", "r") as f:
k = int(f.readline())
a = [int(line.strip()) for line in f]
# Tìm k số nguyên tố nhỏ nhất trong dãy số a
primes = []
num_primes_found = 0
for num in sorted(a):
if is_prime(num):
primes.append(num)
num_primes_found += 1
if num_primes_found == k:
break
# Ghi kết quả vào file DAYNT.OUT
with open("DAYNT.OUT", "w") as f:
f.write(" ".join(str(x) for x in primes))
for
bằng lệnh break
. Trong code trên ta thấy cũng cần phải có 2 biến mảng để lưu dữ liệu, tuy nhiên các bạn có thể sử dụng kỹ thuật giống code mẫu 1 để giảm đi 1 biết mảng. Các bạn hãy thử code lại bằng python xem sao nhé.
Tác giả: admin
Ý kiến bạn đọc