一道pascal题目
所谓亲密数对是指:A的因子和等于B,而B的因子和正好等于A,且A<>B,则称A,B为亲密数对。例如284和220,220的因子有1,2,4,5,11,20,22,44,5...
所谓亲密数对是指:A的因子和等于B,而B的因子和正好等于A,且A <>B,则 称A,B为亲密数对。例如284和220,220的因子有1,2,4,5,11,20,22,44,55,110,他们和为284,284的因子有1,2,4,71,112,他们和为220。
注意:这里的因子是指除去本身之外所有的因子(包括1这个因子)。 展开
注意:这里的因子是指除去本身之外所有的因子(包括1这个因子)。 展开
3个回答
展开全部
给你核心代码吧,这是判断两个数是否是亲密数对的函数:
function main(a,b : longint) : boolean;
var
i,s1,s2 : longint;
begin
if (a = b) then
exit(false);
s1 := 0;
s2 := 0;
for i := 1 to a-1 do
if (a mod i) = 0 then
inc(s1,i);
for i := 1 to b-1 do
if (b mod i) = 0 then
inc(s2,i);
if (s1 = b)and(s2 = a) then
exit(true);
exit(false);
end;
function main(a,b : longint) : boolean;
var
i,s1,s2 : longint;
begin
if (a = b) then
exit(false);
s1 := 0;
s2 := 0;
for i := 1 to a-1 do
if (a mod i) = 0 then
inc(s1,i);
for i := 1 to b-1 do
if (b mod i) = 0 then
inc(s2,i);
if (s1 = b)and(s2 = a) then
exit(true);
exit(false);
end;
展开全部
var a,b,tota,totb,i:longint;
begin
readln(a,b);
tota:=0;totb:=0;
for i:=1 to trunc(sqrt(a)) do
begin
if a mod i=0 then inc(tota,i);
if a mod (a div i)=0 then inc(tota,a div i);
if i*i=a then dec(tota,i);
end;
for i:=1 to trunc(sqrt(b)) do
begin
if b mod i=0 then inc(totb,i);
if b mod (b div i)=0 then inc(totb,b div i);
if i*i=b then dec(totb,i);
end;
if(tota=b)and(totb=a)then writeln('YES') else writeln('NO');
end.
begin
readln(a,b);
tota:=0;totb:=0;
for i:=1 to trunc(sqrt(a)) do
begin
if a mod i=0 then inc(tota,i);
if a mod (a div i)=0 then inc(tota,a div i);
if i*i=a then dec(tota,i);
end;
for i:=1 to trunc(sqrt(b)) do
begin
if b mod i=0 then inc(totb,i);
if b mod (b div i)=0 then inc(totb,b div i);
if i*i=b then dec(totb,i);
end;
if(tota=b)and(totb=a)then writeln('YES') else writeln('NO');
end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
var
i,n,m,t,tt:longint;
begin
read(n,m);
tt:=0;
t:=0;
for i:=1 to n-1 do
if n mod i=0 then t:=t+i;
for i:=1 to m-1 do
if m mod i=0 then tt:=tt+i;
if (t=m)and(tt=n) then write('yes') else write('no');
end.
i,n,m,t,tt:longint;
begin
read(n,m);
tt:=0;
t:=0;
for i:=1 to n-1 do
if n mod i=0 then t:=t+i;
for i:=1 to m-1 do
if m mod i=0 then tt:=tt+i;
if (t=m)and(tt=n) then write('yes') else write('no');
end.
追问
是打印出亲密数对的个数和他们是多少
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询