鱼C论坛

 找回密码
 立即注册
查看: 2935|回复: 6

[已解决]关于求因数的题目

[复制链接]
发表于 2022-10-4 16:45:07 | 显示全部楼层 |阅读模式

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

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

x
一个数如果恰好等于它的因子之和,这个数就称为完数。例如:6=1+2+3。求出1000内的完数
输出格式为:6 its factors are 1, 2, 3
最佳答案
2022-10-4 18:19:41
  1. #include <stdio.h>
  2. bool wanshu(int n) { //传说中的完数
  3.         int sum = 0; //因子和
  4.         for (int i = 1; i < n; ++i) //1枚举到n - 1
  5.                 if (n % i == 0) //如果i是n的因数
  6.                         sum += i; //加入和
  7.         return n == sum; //判断一下
  8. }
  9. int main() {
  10.         for (int i = 1; i <= 1000; ++i) {
  11.                 if (wanshu(i)) //是完数输出
  12.                         printf("%d ", i);
  13.         }
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-4 16:56:13 | 显示全部楼层
本帖最后由 tommyyu 于 2022-10-4 17:09 编辑
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int factors[1000];
  6.         for(int i=2; i<=1000; ++i) {
  7.                 int sum = 0;
  8.                 int count = 0;
  9.                 for(int j = 1; j < i; ++j) {
  10.                         if(i%j == 0) {
  11.                                 factors[count++] = j;
  12.                                 sum += j;
  13.                         }
  14.                 }
  15.                 if(sum == i) {
  16.                         cout<<i<<" its factors are ";
  17.                         for(int j=0; j<count-1; ++j) cout<<factors[j]<<",";
  18.                         cout<<factors[count-1]<<endl;
  19.                 }
  20.         }
  21.         return 0;
  22. }
复制代码

输出:
  1. 6 its factors are 1,2,3
  2. 28 its factors are 1,2,4,7,14
  3. 496 its factors are 1,2,4,8,16,31,62,124,248
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-4 16:58:29 | 显示全部楼层

看好,这是c语言板块
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-4 17:09:56 | 显示全部楼层
青出于蓝 发表于 2022-10-4 16:58
看好,这是c语言板块

没有仔细看
现在已经改成C++了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-4 17:23:18 | 显示全部楼层
  1. #include <stdio.h>

  2. void foo(int n)
  3. {
  4.         int b , c , d[200] , i                                      ;
  5.         for(c = 0 , i = 1 ; i < n ; i ++) if(! (n % i)) d[c ++] = i ;
  6.         for(i = 0 , b = 0 ; i < c ; i ++) b += d[i]                 ;
  7.         if(b == n) {
  8.                 printf("%3d its factors are : %d" , n , d[0])       ;
  9.                 for(i = 1 ; i < c ; i ++) printf(",%d" , d[i])      ;
  10.                 printf("\n")                                        ;
  11.         }
  12. }

  13. int main(void)
  14. {
  15.         int i                                                       ;
  16.         for(i = 2 ; i <= 1000 ; i ++) foo(i)                        ;
  17. }
复制代码

        编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x
  3.   6 its factors are : 1,2,3
  4. 28 its factors are : 1,2,4,7,14
  5. 496 its factors are : 1,2,4,8,16,31,62,124,248

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

使用道具 举报

发表于 2022-10-4 18:19:41 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. bool wanshu(int n) { //传说中的完数
  3.         int sum = 0; //因子和
  4.         for (int i = 1; i < n; ++i) //1枚举到n - 1
  5.                 if (n % i == 0) //如果i是n的因数
  6.                         sum += i; //加入和
  7.         return n == sum; //判断一下
  8. }
  9. int main() {
  10.         for (int i = 1; i <= 1000; ++i) {
  11.                 if (wanshu(i)) //是完数输出
  12.                         printf("%d ", i);
  13.         }
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-10-4 18:22:07 | 显示全部楼层
tommyyu 发表于 2022-10-4 17:09
没有仔细看
现在已经改成C++了

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 18:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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