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
Đã 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.