鱼C论坛

 找回密码
 立即注册
查看: 1222|回复: 4

[已解决]求友好数对

[复制链接]
发表于 2020-11-17 23:06:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
给出范围 m、n (1<=m<=n <=10000) 内所有的友好数对
最佳答案
2020-11-17 23:17:19
所谓友好数对就是两个整数的所有正因子之和(包括1,不包括自身)等于对方,就称这对数是友好的
  1. #include<stdio.h>
  2. int Facsum(int n)
  3. {
  4.         int i, sum = 0;
  5.         for (i = 1;i < n;i++)
  6.         {
  7.                 if (n % i == 0)
  8.                 {
  9.                         sum += i;
  10.                 }
  11.         }
  12.         return sum;
  13. }

  14. int main()
  15. {
  16.         int m, n, i, flag = 0, sum = 0;
  17.         scanf("%d%d", &m, &n);
  18.         for (i = m;i <= n;i++)
  19.         {
  20.                 sum = Facsum(i);
  21.                 if (Facsum(sum) == i && sum > i)
  22.                 {
  23.                         flag = 1;
  24.                         printf("%d %d\n", i, sum);
  25.                 }
  26.         }
  27.         if (flag == 0)
  28.                 printf("没有友好数对\n");
  29.         return 0;
  30. }
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-17 23:17:19 | 显示全部楼层    本楼为最佳答案   
所谓友好数对就是两个整数的所有正因子之和(包括1,不包括自身)等于对方,就称这对数是友好的
  1. #include<stdio.h>
  2. int Facsum(int n)
  3. {
  4.         int i, sum = 0;
  5.         for (i = 1;i < n;i++)
  6.         {
  7.                 if (n % i == 0)
  8.                 {
  9.                         sum += i;
  10.                 }
  11.         }
  12.         return sum;
  13. }

  14. int main()
  15. {
  16.         int m, n, i, flag = 0, sum = 0;
  17.         scanf("%d%d", &m, &n);
  18.         for (i = m;i <= n;i++)
  19.         {
  20.                 sum = Facsum(i);
  21.                 if (Facsum(sum) == i && sum > i)
  22.                 {
  23.                         flag = 1;
  24.                         printf("%d %d\n", i, sum);
  25.                 }
  26.         }
  27.         if (flag == 0)
  28.                 printf("没有友好数对\n");
  29.         return 0;
  30. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-17 23:49:23 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-18 00:01 编辑
  1. #include <stdio.h>

  2. int sum(int n)
  3. {
  4.         int k , s                                              ;
  5.         for(s = 1 , k = 2 ; k < n ; k ++) if(! (n % k)) s += k ;
  6.         return s                                               ;
  7. }

  8. main(void)
  9. {
  10.         int a , c , k , m , n                                  ;
  11.         scanf("%d%d" , & m , & n)                              ;
  12.         for(c = 0 , k = m ; k <= n ; k ++) {
  13.                 a = sum(k)                                     ;
  14.                 if(a != k && sum(a) == k) {
  15.                         c ++                                   ;
  16.                         printf("%4d\t%4d\n" , k , a)           ;
  17.                         k = a                                  ;
  18.                 }
  19.         }
  20.         if(! c) printf("指定范围没有友好数。\n")               ;
  21. }
复制代码

        编译、运行实况
  1. D:\00.Excise\C>g++ -o fx fx.c

  2. D:\00.Excise\C>fx
  3. 1 10000
  4. 220     284
  5. 1184    1210
  6. 2620    2924
  7. 5020    5564
  8. 6232    6368

  9. D:\00.Excise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-18 00:18:12 | 显示全部楼层

谢谢你的回答,两个程序我都运行了,他的程序是一点问题都没有,你的程序存在一个警告:错误  C4430  缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int,10行。当然,这不是大问题,加上就行了,但他的回答在前面,不好意思了,下次再选你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-18 00:18:47 | 显示全部楼层
风过无痕1989 发表于 2020-11-17 23:17
所谓友好数对就是两个整数的所有正因子之和(包括1,不包括自身)等于对方,就称这对数是友好的

谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 17:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表