ANHEM.INP | ANHEM.OUT | ANHEM.INP | ANHEM.OUT |
6 25 | YES | 12 13 | NO |
const fi = 'ANHEM.INP';
fo = 'ANHEM.OUT';
VAR i,j,m,n:word;
f1, f2: text;
procedure doctep;
Begin
assign(f1,fi); reset(f1);
assign(f2,fo);rewrite(f2);
read(f1,m,n);
end;
FUNCTION KTAE(x,y:word):Boolean;
var i,j:word;
sx,sy:longint;
ok:boolean;
BEGIN
Sx:=0; Sy:=0;
For i:=2 to trunc(x div 2) do if x mod i = 0 then Sx:=Sx+i;
For j:=2 to trunc(y div 2) do if y mod j = 0 then Sy:=Sy+j;
If (Sx = Sy) and (sx>0) Then ok:=TRUE ELSE ok:=FALSE;
KTAE:=ok;
END;
procedure xuly;
begin
If KTAE(m,n)=TRUE then
write(f2,'YES') else write(f2,'NO');
end;
procedure dongtep;
begin
close(f1);
close(f2);
end;
BEGIN
doctep;
xuly;
dongtep;
END.
Code sau mình không đọc và ghi dữ liệu từ file nhé, các bạn tự nhập, còn bạn nào cần thì cữ bổ sung vào là ok.
def sum_proper_divisors(n):
return sum(i for i in range(1, n) if n % i == 0)
def are_amicable_numbers(m, n):
return sum_proper_divisors(m) == sum_proper_divisors(n)
m, n = map(int, input().split())
if are_amicable_numbers(m, n):
print("YES")
else:
print("NO")
Vì đề ra cho M, N <= 104 nên vòng lặp for ta cho chạy tới n luôn ha. Tuy nhiên nếu cần thiết thì ta cũng có thể chỉ cho chạy tới phần nguyên căn bậc hai của n. Cách làm giông như bài "Sô không hoàn hảo" --> Các bạn có thể tham khảo tại đấy: https://baitaponha.com/giai-de-tin-hoc/cau-1-so-khong-hoan-hao-de-thi-hsg-tinh-lop-12-nam-hoc-2022-2023-32.html
Tác giả: admin
Ý kiến bạn đọc