Thứ Hai, 13 tháng 8, 2012

Bài tập cơ bản về số học (Dành cho cấp hai)

Bài 1: Số hoàn chỉnh là số có tổng các ước (không kể nó) bằng chính nó . Liệt kê các số hoàn chỉnh nhỏ hơn  hoặc bằng N. N<=10000000. Vào từ file Perfect.INP chỉ có một dòng chứa số N. Dữ liệu ra trong file Perfect.OUT như sau: dòng đầu ghi ra tổng các số hoàn chỉnh nhỏ hơn hoặc bằng N, các dòng sau liệt kê các số hoàn chỉnh. mỗi số trên một dòng.

Solution (free pascal):

program Perfect;
var
    N:longint;
    fi,fo:text;

(*Check number perfect*)
function IsPerfect(num:longint):boolean;
var
    i:longint;
    sum:longint;
    num_:longint;
begin
    sum:=1;
    num_:=num;
    i:=2;
    while(i*i<=num) do
        begin
            if((num mod i)=0) then
                begin
                    sum :=sum+ i;
                    sum :=sum+(num div i);
                end;
            i :=i+ 1;
        end;
    if sum = num_ then
        IsPerfect:=true
    else
        IsPerfect:=false;
    (*
    writeln('num=',num_,'sum=',sum);
    readln;
    *)
end;

begin
    assign(fi,'Perfect.INP');reset(fi);
    assign(fo,'Perfect.OUT');rewrite(fo);
    read(fi,N);
    (*write(N);*)
    while N>1 do
        begin
            if(IsPerfect(N)) then
                writeln(fo,N);
            N:=N-1;
        end;
    (*readln;  *)
    close(fi);
    close(fo);
end.

Không có nhận xét nào:

Đăng nhận xét