program SuperPrimes;
function IsPrime(n: integer): boolean;
var
i: integer;
begin
if n <= 1 then
IsPrime := False
else if n <= 3 then
IsPrime := True
else if (n mod 2 = 0) or (n mod 3 = 0) then
IsPrime := False
else
begin
i := 5;
while i * i <= n do
begin
if (n mod i = 0) or (n mod (i + 2) = 0) then
begin
IsPrime := False;
Exit;
end;
i := i + 6;
end;
IsPrime := True;
end;
end;
function CountSuperPrimes(n: integer): integer;
var
primeNumbers: array of integer;
superPrimeCount, i, j: integer;
begin
superPrimeCount := 0;
SetLength(primeNumbers, 0);
for i := 2 to n - 1 do
begin
if IsPrime(i) then
begin
SetLength(primeNumbers, Length(primeNumbers) + 1);
primeNumbers[High(primeNumbers)] := i;
end;
end;
for i := 0 to High(primeNumbers) do
begin
for j := i to High(primeNumbers) do
begin
if (primeNumbers[i] + primeNumbers[j] <= n) and IsPrime(primeNumbers[i] + primeNumbers[j]) then
Inc(superPrimeCount);
end;
end;
CountSuperPrimes := superPrimeCount;
end;
var
n, result: integer;
begin
readln(n);
result := CountSuperPrimes(n);
writeln(result);
end.
Đáp án:
sieu_nguyen_to(n):
result = 0
for x từ 2 đến n:
if la_so_nguyen_to(x):
for a từ 2 đến x/2:
if la_so_nguyen_to(a) và la_so_nguyen_to(x - a):
result += 1
th break
return result
la_so_nguyen_to(x):
Nếu x == 2:
trả về True
Nếu x < 2 hoặc x chẵn:
trả về False
Duyệt i từ 3 đến căn bậc hai của x với bước nhảy 2:
Nếu x chia hết cho i:
trả về False
trả về True
Giải thích các bước giải:
Để tìm các số siêu nguyên tố không vượt quá một số nguyên dương n, ta chỉ cần kiểm tra tất cả các số từ 2 đến n và kiểm tra xem số đó có phải là số nguyên tố không và có thể phân tích thành tổng của hai số nguyên tố khác không.
Để kiểm tra một số x có phải là số nguyên tố, ta có thể duyệt từ 2 đến căn bậc hai của x để kiểm tra xem có số nào chia hết cho x không. Nếu có, thì x không phải là số nguyên tố. Trái lại, nếu không có số nào chia hết cho x thì x là số nguyên tố.
Sau khi kiểm tra x có phải là số nguyên tố, ta có thể duyệt tất cả các số nguyên tố từ 2 đến x/2 để kiểm tra xem có cặp số nguyên tố a và b nào thỏa mãn x = a + b không. Nếu có ít nhất một cặp số nguyên tố a và b thỏa mãn, thì x là số siêu nguyên tố.
Dưới đây là code để tìm số lượng các số siêu nguyên tố không vượt quá n:
sieu_nguyen_to(n):
result = 0
for x từ 2 đến n:
if la_so_nguyen_to(x):
for a từ 2 đến x/2:
if la_so_nguyen_to(a) và la_so_nguyen_to(x - a):
result += 1
th break
return result
la_so_nguyen_to(x):
Nếu x == 2:
trả về True
Nếu x < 2 hoặc x chẵn:
trả về False
Duyệt i từ 3 đến căn bậc hai của x với bước nhảy 2:
Nếu x chia hết cho i:
trả về False
trả về True
Sau khi viết xong code, ta có thể triển khai nó thành mã nguồn trong ngôn ngữ lập trình yêu thích của mình để tính số lượng số siêu nguyên tố không vượt quá một số nguyên dương n cụ thể.
Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!
Lớp 8 - Năm thứ ba ở cấp trung học cơ sở, học tập bắt đầu nặng dần và sang năm lại là năm cuối cấp, áp lực lớn dần. Hãy chú ý đến sức khỏe, cân bằng giữa học và nghỉ ngơi để đạt hiệu quả tốt nhất!
Copyright © 2021 HOCTAPSGK