http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 5789|回复: 2

[C#语言基础] 判断一个数是否是完数

[复制链接]
发表于 2013-12-9 15:41:21 | 显示全部楼层 |阅读模式
static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            int sum = 0;
            for (int i = 1; i <= n/2; i++)
            {
                if (n % i == 0)
                {
                    Console.Write("{0}\t",i);
                    sum += i;
                }
            }
            if (sum == n)
            {
                Console.WriteLine("\n{0}是一个完数.",n);
            }
            else
            {
                Console.WriteLine("\n{0}不是一个完数.",n);
            }
            Console.ReadKey();
        }



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-12-15 17:13:13 | 显示全部楼层
首先声明,我这也是从别的地方看来的。
一、定义
      完数,即完全数,其概念就是它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。当然举个例子更加简单。比如:
数字 6 = 1 + 2 + 3;而数字6的约数有1、2、3、6四个,按照定义来说,把6去了,然后剩下的1、2、3相加正好等于6,所以,可以说6就是完全数。
二、判断方法
      楼主的方法是先取得约数,再相加判断,方法很直接。不过,正如同所有的算法一样,最直接的一般都意味着效率最低的。我也是看了百科里面的介绍才了解这些东西。
      第一、完全数,均是6或者8这两个数字结尾。(据说是数学家研究的)
      第二、大数学家欧拉曾推算出完全数的获得公式:如果p是质数,且2^p-1也是质数,那么(2^p-1)X2^(p-1)便是一个完全数。
例如p=2,是一个质数,2^p-1=3也是质数,(2^p-1)X2^(p-1)=3X2=6,是完全数。
例如p=3,是一个质数,2^p-1=7也是质数,(2^p-1)X2^(p-1)=7X4=28,是完全数。
例如p=5,是一个质数,2^p-1=31也是质数,(2^p-1)X2^(p-1)=31X16=496是完全数。
但是2^p-1什么条件下才是质数呢?
事实上,当2^p-1是质数的时候,称其为梅森素数。到2013年2月6日为止,人类只发现了48个梅森素数,较小的有3、7、31、127等。

上面这些内容是我照抄复制过来的,这里又跟素数扯上了关系。记得论坛里面好像也有一个关于素数计算的帖子。我自己今天也琢磨了一下,自己感觉是这样:
1、素数至少是个奇数,所以偶数可以直接pass。
2、素数中,除了5这个数字外,其他以5结尾的奇数都不是素数。
这样的话,我大概估算了一下,这么一除,大概数据量也就是还有原来的40%左右吧。今天暂时就想了这么多,以后还可以继续研究研究。
不过,今天最大的收获是,从论坛中看到了东西,然后自己从网络中查阅了相关的资料,虽然很肤浅,但毕竟还是长了一些知识,我想这也是论坛发展下去的一个良好动力吧,就是给大家提供了一个可以参与学习交流的机会,最后打个广告,祝咱们论坛越办越好。
发表于 2014-7-1 21:56:09 | 显示全部楼层
求1-1000内所有的完数
for (int i = 5; i <= 1000; i++)
            {
                int wnum = 0; //因子数的和
                for (int i1 = 1; i1 < i; i1++)
                {
                    if (i % i1 == 0)
                    {
                        wnum = wnum + i1;
                        //Console.WriteLine("i:{0},-i1:{1}&&&&&{2}",i,i1,wnum);
                    }
                }
                if (wnum == i)
                {
                    Console.WriteLine("完数:" + i);
                }
            }

我正好也做了这题,看了楼主的发现:n/2 的作用,我没考虑到这一点。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-19 11:08

© 2014-2021

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