Dãy số Hamming Dãy số nguyên dương tăng dần trong đó, phần tử đầu tiên là ?1 = 1, các phần tử tiếp theo có ước nguyên tố của mỗi số không quá 5 được gọi là dãy hamming. Như vậy, 10 = 2 x 5 sẽ là một số trong hãy Hamming, còn 26 = 2 x 13 không thuộc dãy hamming. Phần đầu của dãy Hamming là: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15….. Yêu cầu: Cho số nguyên ? (? ≤ 1018). Hãy kiểm tra xem nó có thuộc dãy số Hamming? Dữ liệu: Vào từ file văn bản HAMMING.INP: Gồm nhiều dòng, mỗi dòng ghi một số nguyên x. Kết quả: Ghi ra file văn bản HAMMING.OUT: In ra YES/NO tương ứng với mỗi số x trong file Input Có/không thuộc dãy Hamming? Ví dụ: HAMMING.INP HAMMING.OUT 11 NO 1 YES 2 YES 6 YES 7 NO 8 YES 9 YES 10 YES 11 NO 12 YES 13 NO 14 NO

1 câu trả lời

Đã sửa lại đúng với yêu cầu đề bài @_@

const fi='haming.inp';
      fo='haming.out';
var n:array [1..10000] of int64;
    dem,i:byte;
begin
        assign(input,fi);
        reset(input);
        dem:=1;
        while not eof do
                begin
                        readln(n[dem]);
                        inc(dem);
                end;
        close(input);
        for i:=1 to dem-1 do
        begin
                while n[i] mod 2 = 0 do
                        n[i]:= n[i] div 2;
                while n[i] mod 3 = 0 do
                        n[i]:= n[i] div 3;
                while n[i] mod 5 = 0 do
                        n[i]:= n[i] div 5;
        end;
        assign(output,fo);
        rewrite(output);
        for i:=1 to dem-1 do
                if n[i]>1 then writeln('NO') else writeln('YES');
        close(output);
end.

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