免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1595 | 回复: 5

[数值计算] shell编写实现这个 [复制链接]

论坛徽章:
0
发表于 2015-01-28 14:27 |显示全部楼层
一个数恰好等于它的因子之和,这样的数称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此,6是“完数”。编写程序写出1000以内所有的完数,并按下面的格式输出其因子:
6 its factors are 1 2 3

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
发表于 2015-01-28 14:50 |显示全部楼层
回复 1# sun_jzz

是这样吗?
  1. awk 'BEGIN{for(i=1;i<=1000;i++){for(m=(i-1);m>=1;m--)if(!(i%m)){n=n+m;a=a" "m};if(i==n)print i,a;n="";a=""}}'
  2. 6  3 2 1
  3. 28  14 7 4 2 1
  4. 496  248 124 62 31 16 8 4 2 1
复制代码

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
发表于 2015-01-28 15:16 |显示全部楼层
Buring__ 发表于 2015-01-28 14:50
回复 1# sun_jzz

是这样吗?

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
发表于 2015-01-28 15:47 |显示全部楼层
本帖最后由 zsszss0000 于 2015-01-28 15:48 编辑

贴一段C代码
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main ( int argc, char *argv[] )
  5. {

  6.     char a[1024]={0};
  7.     int i=0;
  8.     int j=0;
  9.     int sum = 0;

  10.     for(i=1;i<=1000;i++)
  11.     {   
  12.         memset(a,0,1024);
  13.         sum = 0;
  14.         for(j=1;j<=i/2;j++)
  15.         {   
  16.             if(i%j==0)
  17.             {   
  18.                 sprintf(a+strlen(a),"%d ",j);
  19.                 sum += j;   
  20.             }   

  21.         }   
  22.         if(sum == i)
  23.         {   
  24.             printf ( " %d\t是完数,因子们是 %s\n",i,a);
  25.         }   
  26.     }   

  27.     return EXIT_SUCCESS;
  28. }/* end of function main  */                    
复制代码
运行结果是
  1. 6      是完数,因子们是 1 2 3
  2. 28     是完数,因子们是 1 2 4 7 14
  3. 496    是完数,因子们是 1 2 4 8 16 31 62 124 248
复制代码

论坛徽章:
28
2015年迎新春徽章
日期:2015-03-04 10:16:53午马
日期:2015-03-20 17:11:07亥猪
日期:2015-03-20 17:11:23戌狗
日期:2015-03-20 17:11:33酉鸡
日期:2015-03-20 17:11:47申猴
日期:2015-03-20 17:11:58未羊
日期:2015-03-20 17:12:10子鼠
日期:2015-03-20 17:12:23丑牛
日期:2015-03-20 17:12:40卯兔
日期:2015-03-20 17:12:51辰龙
日期:2015-03-20 17:13:00巳蛇
日期:2015-03-20 17:13:12
发表于 2015-01-28 16:45 |显示全部楼层
#!/bin/bash
for((i=1;i<=1000;i++));do
        k=0;z=0
        for ((j=1;j<=$(($i/2));j++));do
                [ $(($i%$j)) == 0 ] && a[$k]=$j&&z=$((${a[$k]}+$z)) && let k++
        done
        [ $z == $i ]&& echo -en "$i:\t" && for ((n=0;n<=$k;n++));do echo -n "${a[$n]} ";done && echo ""
        unset a
done

随便写了个,感觉复杂了...

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
发表于 2015-01-28 16:48 |显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP