用pascal求2到1000的亲密数对program zlx;varn1,n2,a,b,s1,s2:integer;beginwriteln;for n1:=2 to 1000 dobegins1:=0;for a:=1 to n1-1 doif n1 mod a=0 thenbegins1:=s1+a;for n2:=2 to 1000 dobegins2:=0;for b:=1 to n2-1 doif n2 mod b=0 thenbegins2:=s2+b

来源:学生作业帮助网 编辑:六六作业网 时间:2024/05/09 20:12:14
用pascal求2到1000的亲密数对programzlx;varn1,n2,a,b,s1,s2:integer;beginwriteln;forn1:=2to1000dobegins1:=0;for

用pascal求2到1000的亲密数对program zlx;varn1,n2,a,b,s1,s2:integer;beginwriteln;for n1:=2 to 1000 dobegins1:=0;for a:=1 to n1-1 doif n1 mod a=0 thenbegins1:=s1+a;for n2:=2 to 1000 dobegins2:=0;for b:=1 to n2-1 doif n2 mod b=0 thenbegins2:=s2+b
用pascal求2到1000的亲密数对
program zlx;
var
n1,n2,a,b,s1,s2:integer;
begin
writeln;
for n1:=2 to 1000 do
begin
s1:=0;
for a:=1 to n1-1 do
if n1 mod a=0 then
begin
s1:=s1+a;
for n2:=2 to 1000 do
begin
s2:=0;
for b:=1 to n2-1 do
if n2 mod b=0 then
begin
s2:=s2+b;
if (s1=n2) and (s2=n1) and (n1

用pascal求2到1000的亲密数对program zlx;varn1,n2,a,b,s1,s2:integer;beginwriteln;for n1:=2 to 1000 dobegins1:=0;for a:=1 to n1-1 doif n1 mod a=0 thenbegins1:=s1+a;for n2:=2 to 1000 dobegins2:=0;for b:=1 to n2-1 doif n2 mod b=0 thenbegins2:=s2+b
不得不问一句:LZ到底想干嘛?
这样编程,岂止是很费时间?太麻烦了!
先说一下你的问题:
      你的代码的问题,首先在于很麻烦,看起来不容易找出错误,只要找出错误,就好理解了.
      外层循环 n1 枚举第一个数,内层循环 s1 累加 n1 的所有因数,再内层 n2 枚举第二个数,再再内层 s2 累加 n2 的所有因数.但是,在 s1和s2 都还没有累加完时,怎么就相互比较了呢?!
      我们可以模拟一下,当 n1 循环到408时,我自己计算出它的所有因数和确实是672:
                 672=1+2+3+4+6+8+12+17+24+34+51+68+102+136+204=s1
      然后672的所有因数是:
            1 2 3 4 6 7 8 12 14 16 21 24 28 32 42 48 56 84 96 112 168 224 336
      加起来是1344,确实不等于408,但是,我们将上面的数从左往右加起来,
  1+2+3+4+6+7+8+12+14+16+21+24+28+32+42+48+56+84+……加到这里,发现正好得到408,于是由于程序的bug,“408 672” 就被输出了.


其实由于数据量不大,枚举是可以解决问题的,代码如下:
var a:array[2..1000]of integer;
    i,j:integer;
begin
 for i:=2 to 1000 do
  for j:=1 to i-1 do
   if i mod j=0 then
    inc(a[i],j);
 for i:=2 to 500 do
  if (i=a[a[i]])and(i<a[i]) then writeln(i,' ',a[i]);
end.

找2~1000中的亲密数对(如果a的因子和等于b ,b的因子和等于a ,且a≠b,则称a,b为亲密数对.pascal pascal亲密数对亲密数对时间限制:1秒 内存限制:64 MB试题描述键盘输入N,N在2至2000之内,求2至N中的亲密数对,就是A的因子和等于B,B的因子和等于A,并且A≠B.如48和75是亲密数对.48的因子和为2+3+4+6+8 二、 编写程序,求2到500之间的所有亲密数对.其中亲密数对的定义为:编写程序,求2到500之间的所有亲密数对.其中亲密数对的定义为:如果M的因子(包括1但不包括本身)之和为N,且N的因子之和为M, 用pascal求2到1000的亲密数对program zlx;varn1,n2,a,b,s1,s2:integer;beginwriteln;for n1:=2 to 1000 dobegins1:=0;for a:=1 to n1-1 doif n1 mod a=0 thenbegins1:=s1+a;for n2:=2 to 1000 dobegins2:=0;for b:=1 to n2-1 doif n2 mod b=0 thenbegins2:=s2+b 编程:找出2—1000中的亲密数对(如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲密数对). 恳请网友帮忙,用c语言编写程序,求500以内的所有亲密数对.若正整数A的所有因子(包括1但不包括自身,下同)之和为B,而B的因子之和为A,则称A和B为一对亲密数.例如,6的因子之和为1+2+3=6,因此6与6 pascal语言for如果整数A的全部因子(包括1,不包括A本身)之和等于B,且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数.求3000以内的全部亲密数.(要求:A < B )这是我 C语言求2~100中的所有的亲密素数对的个数亲密素数对定义:如果X为素数,则X+2也为素数 求外语对恋人的称呼要亲密点, PASCAL求2的n次方用高精度算 用Pascal编程求满足下列条件的三位数:该三位数等于它数... Miller-Rabbin素数测试法求一个用Miller-Rabbin算法判断是否为素数的程序,注意要用PascalPascal!Pascal!Pascal!Pascal!Pascal!Pascal!Pascal!Pascal!最好有说明 什么是亲密数对a或b的因子是指什么 用随机函数random产生100到1000的随机数,用pascal语言,语句怎么写? 用pascal求一个数,这个数是11的倍数,百位数加十位数等于千位数,并且百位数加十位数是完全平方数. 一道Free Pascal的题目求100~1000之间能被7整除的数,每行输出10个. 对亲密的人说这样的 英文对男生的亲密称呼