一个数如果恰好等于它的因数之和,则称为完数下面是一个查找1000以内完数的shell脚本:
#!/bin/bash
#设置变量i,查找1000内的完数
for ((i=1;i<1000;i++))
do
for ((m=0,a=1; a <= $i/2;++a))
do
#判断a是否为i的因数
v1=$[$i % $a]
if [ $v1 -eq 0 ]
then
#因数相加
m=`echo "$m+$a" | bc`
#若相加结果等于i,则显示i的值
if [ $m -eq $i ]
then
echo $i
fi
fi
done
done
运行得到的结果是:6、24、28、496。但24并不是完数,其他的都正确,不知道这个24是怎么来的,脚本的问题在哪里呢?
思雨 于 2012-10-09 17:06:21发表:
嗯嗯,果然对了。太谢谢了,我会注意的
胶头滴管3 于 2012-10-07 19:37:39发表:
24是因为你的判断条件放的位置不对,24的因数1+2+3+4+6+8=24,所以会输出24正确的写法是:
for ((i=1;i<1000;i++))
do
for ((m=0,a=1; a <= $i/2;++a))
do
#判断a是否为i的因数
v1=$[$i % $a]
if [ $v1 -eq 0 ]
then
#因数相加
m=`echo "$m+$a" | bc`
#若相加结果等于i,则显示i的值
#在这里内循环结束
fi
done
if [ $m -eq $i ]
then
echo $i
fi
done
这样就好了,另外,希望楼主能注意书写格式,毕竟,好的书写方式是赏心悦目的
思雨 于 2012-10-07 09:14:25发表:
这是c代码,能得到正确结果
#include
main()
{
int i,a,m;
for(i=1;i<1000;i++)
{
for(m=0,a=1;a<=i/2;a++)
if(i%a==0)
m=m+a;
if(m==i)
printf("%4d",i);
}
}
Htgiot 于 2012-10-06 21:36:37发表:
不懂,帮不上忙