鱼C论坛

 找回密码
 立即注册
查看: 2191|回复: 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
#include <stdio.h>
bool wanshu(int n) { //传说中的完数
        int sum = 0; //因子和
        for (int i = 1; i < n; ++i) //1枚举到n - 1
                if (n % i == 0) //如果i是n的因数
                        sum += i; //加入和
        return n == sum; //判断一下
}
int main() {
        for (int i = 1; i <= 1000; ++i) {
                if (wanshu(i)) //是完数输出
                        printf("%d ", i);
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-4 16:56:13 | 显示全部楼层
本帖最后由 tommyyu 于 2022-10-4 17:09 编辑
#include<iostream>
using namespace std;
int main()
{
        int factors[1000];
        for(int i=2; i<=1000; ++i) {
                int sum = 0;
                int count = 0;
                for(int j = 1; j < i; ++j) {
                        if(i%j == 0) {
                                factors[count++] = j;
                                sum += j;
                        }
                }
                if(sum == i) {
                        cout<<i<<" its factors are ";
                        for(int j=0; j<count-1; ++j) cout<<factors[j]<<",";
                        cout<<factors[count-1]<<endl; 
                }
        }
        return 0;
}
输出:
6 its factors are 1,2,3
28 its factors are 1,2,4,7,14
496 its factors are 1,2,4,8,16,31,62,124,248
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

看好,这是c语言板块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

没有仔细看
现在已经改成C++了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

void foo(int n)
{
        int b , c , d[200] , i                                      ;
        for(c = 0 , i = 1 ; i < n ; i ++) if(! (n % i)) d[c ++] = i ;
        for(i = 0 , b = 0 ; i < c ; i ++) b += d[i]                 ;
        if(b == n) {
                printf("%3d its factors are : %d" , n , d[0])       ;
                for(i = 1 ; i < c ; i ++) printf(",%d" , d[i])      ;
                printf("\n")                                        ;
        }
}

int main(void)
{
        int i                                                       ;
        for(i = 2 ; i <= 1000 ; i ++) foo(i)                        ;
}
        编译、运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

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

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-4 18:19:41 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
bool wanshu(int n) { //传说中的完数
        int sum = 0; //因子和
        for (int i = 1; i < n; ++i) //1枚举到n - 1
                if (n % i == 0) //如果i是n的因数
                        sum += i; //加入和
        return n == sum; //判断一下
}
int main() {
        for (int i = 1; i <= 1000; ++i) {
                if (wanshu(i)) //是完数输出
                        printf("%d ", i);
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

哈哈哈哈,谢谢大佬!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-8 01:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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