Phân rã nguyên tố Khi nghiên cứu về số nguyên tố, người ta dự đoán rằng: Mỗi số nguyên dương không nhỏ hơn 2 có thể viết thành tổng của không quá 3 số nguyên tố (xuất phát từ giả thiết Golbach – Euler). Hãy viết chương trình PR_NGTO.PAS nhập vào một số tự nhiên N (2<=N<=10^6 ) và biểu diễn số N thành tổng của các số nguyên tố với số số hạng là ít nhất. Dữ liệu vào: Số N được nhập từ bàn phím. Dữ liệu ra: Xuất lên màn hình cách viết số N thành tổng các số nguyên tố. Ví dụ : VUONG.INP VUONG.OUT Nhap N =5 5=5 Nhap N =18 18=13+5 Nhap N=2018 2018=2011+7 Nhap N=11111 11111=11093+13+5 pascal nha giải thích ý tưởng luôn ạ

1 câu trả lời

uses crt;
var n,m:longint;
function KTNT(n:longint):boolean;
var i:longint;
begin
    if n < 2 then exit(false);
    if n < 4 then exit(true);
    if n mod 2 = 0 then exit(false);
    if n mod 3 = 0 then exit(false);
    i:=5;
    while i*i <= n do
        begin
            if n mod i = 0 then exit(false);
            if n mod (i+2) = 0 then exit(false);
            inc(i,6);
        end;
    exit(true);
end;
begin
    clrscr;
    readln(n);
    write(n,'=');
    m:=n;
    while m <> 0 do
        begin
            if KTNT(n) = true then
                begin
                    write(n);
                    readln;
                    exit;
                end;
            n:=n-2;
            while KTNT(n) = false do dec(n);
            write(n,'+');
            m:=m-n;n:=m;
        end;
readln;
end.

Câu hỏi trong lớp Xem thêm