标题:大学新生作业,求解
只看楼主
他不是恶魔
Rank: 1
等 级:新手上路
帖 子:11
专家分:1
注 册:2022-10-18
结帖率:100%
已结贴  问题点数:20 回复次数:5 
大学新生作业,求解
判断一个数是否为完数。例如:6=3+2+1,6等于其因子之和,所以6是完数。请绘制出算法的传统流程图和N-S流程图
搜索更多相关主题的帖子: 作业 完数 流程图 大学 算法 
2022-10-18 10:57
星泪成寒
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:75
专家分:539
注 册:2013-5-19
得分:5 
程序代码:
#include <stdio.h>


int main(void)
{
    int i;
    int number;
    int sum = 0;
    printf("请输入整数: ");
    scanf("%d", &number);

    for (i = 1; i < number; i++) {
        if (number % i == 0) {
            printf("因子: %d  ", i);
            sum += i;
        }
    }
    printf("\n结果:");
    
    if (sum == number) {
        printf("%d 是完数\n", number);
    }
    else {
        printf("%d 不是完数\n", number);
    }

    return 0;
}
2022-10-18 11:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
以下是引用他不是恶魔在2022-10-18 10:57:44的发言:

判断一个是否为完数。例如:6=3+2+1,6等于其因子之和,所以6是完数。请绘制出算法的传统流程图和N-S流程图

你这个“数”的限定是什么呢?为什么都喜欢出些题意不明的题目

如果你这个“数”是指 0 至 2^32-1 内的整数(对应C语言的 uint32_t 类型),那一共就 5 个,分别是 6, 28, 496, 8128, 33550336;
如果你这个“数”是指 0 至 2^64-1 内的整数(对应C语言的 uint64_t 类型),那一共就 8 个,分别是 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128;
迄今为止,人类才发现51个梅森素数,第51个梅森素数是 2^82589933-1,那么第51个完数就是 (2^82589933-1)*2^(2^82589933-1),十进制的话大约需要 49724095位。
2022-10-18 13:40
他不是恶魔
Rank: 1
等 级:新手上路
帖 子:11
专家分:1
注 册:2022-10-18
得分:0 
回复 2楼 星泪成寒
请问用传统流程图要怎么画啊
2022-10-18 17:44
他不是恶魔
Rank: 1
等 级:新手上路
帖 子:11
专家分:1
注 册:2022-10-18
得分:0 
回复 3楼 rjsp
这个数应该是整数
2022-10-18 17:48
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:5 
程序代码:
#include <math.h>
#include <stdio.h>

int prime(unsigned long long n)
{
    unsigned long long i,k;
    k=sqrt(n)+1;
    for(i=2; i<=k; i++)
    {
        if(n%i == 0)
            return 0;
    }
    return 1;
}

unsigned long long powint(unsigned int base, unsigned int power)
{
    unsigned int i;
    unsigned long long result = 1;
    for(i=0;i<power;i++)
    {
        result *= base;
    }
    return result;
}

int main()
{
    unsigned long long mp=0;
    unsigned int pow=1, count=0;
    printf("Mersenne Prime:\n");

    while(mp<0xffffffffffffffff)
    {
        pow++;
        mp=powint(2,pow)-1;
        if(prime(mp))
        {
            count++;
            printf("M(%u)=%llu", pow-1, mp*powint(2,pow-1));
            printf("\n");
        }
    }
    printf("the number of Mersenne Prime less than unsigned long long is:%d\n", count);

    return 0;
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2022-10-19 15:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510357-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.057692 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved