用pascal求2到1000的亲密数对
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/10 06:53:49
用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
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
不得不问一句: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.
再问: 请问下 for i:=2 to 500 do {这里为甚么从2到500呢} if (i=a[a[i]])and(i
这样编程,岂止是很费时间?太麻烦了!
先说一下你的问题:
你的代码的问题,首先在于很麻烦,看起来不容易找出错误,只要找出错误,就好理解了.
外层循环 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.
再问: 请问下 for i:=2 to 500 do {这里为甚么从2到500呢} if (i=a[a[i]])and(i
用pascal求2到1000的亲密数对
二、 编写程序,求2到500之间的所有亲密数对.其中亲密数对的定义为:
pascal亲密数对亲密数对时间限制:1秒 内存限制:64 MB试题描述键盘输入N,N在2至2000之内,求2至N中的亲
pascal求正整数2到100之间的完全数
恳请网友帮忙,用c语言编写程序,求500以内的所有亲密数对.
编程:找出2—1000中的亲密数对(如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲密数对).
找2~1000中的亲密数对(如果a的因子和等于b ,b的因子和等于a ,且a≠b,则称a,b为亲密数对.
pascal求两个数的最小公倍数
C语言求2~100中的所有的亲密素数对的个数
求外语对恋人的称呼要亲密点,
【入门】求数II pascal
pascal求打印回文数