免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1643 | 回复: 0
打印 上一主题 下一主题

完全数 java算法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-21 12:20 |只看该作者 |倒序浏览
什么是完全数?
如果一个正整数恰好等于它所有的真因子(即除了自身以外的因子)之和,则称之为完全数(完美数)。
例:6=1+2+3


欧几里德完全数定理:若p、(2的p次幂-1) 这两个值均为素数,则 2的(p-1)次幂 乘以 (2的p次幂-1) 的值是个完全数。
package yzg.arithmetic;
/**
* 欧几里德完全数定理:若p、(2的p次幂-1) 这两个值均为素数,则 2的(p-1)次幂 乘以 (2的p次幂-1) 的值是个完全数。
* 如果一个正整数恰好等于它所有的真因子(即除了自身以外的因子)之和,则称之为完全数(完美数)。 例:6=1+2+3
*
* @author yzg
*
*/
public class EntiretyNumber {
    /**
     * @param args
     */
    public static void main(String[] args) {
        for (long p = 2; p = 31; p++) {
            if (!pri(p)) {
                continue;
            }
            long t = 2;
            for (int k = 1; k  p; k++) {
                t = t * 2;
            }
            long j = t / 2;
            t--;
            if (pri(t)) {
                System.out.println(j + " * " + t + " = " + (j * t));
            }
        }
        normal();
    }
    // 八个完全数
    // 3 * 2 = 6
    // 7 * 4 = 28
    // 31 * 16 = 496
    // 127 * 64 = 8128
    // 8191 * 4096 = 33550336
    // 131071 * 65536 = 8589869056
    // 524287 * 262144 = 137438691328
    // 2147483647 * 1073741824 = 2305843008139952128
    /**
     * 判断传入的参数是否是一个素数
     *
     * @param suShu
     * @return true=是,false=不是
     */
    public static boolean pri(long suShu) {
        int q = (int) Math.sqrt(suShu) + 1;
        for (int i = 2; i = q; i++) {
            if (suShu % i == 0 && suShu != 2) {
                return false;
            }
        }
        return true;
    }
    /**
     * 求10000以内的完全数,普通的算法。
     * 找到后,显示成和的形式。
     */
    public static void normal() {
        for (int i = 6; i  10000; i++) {
            int s = 0;
            for (int j = 1; j = i / 2; j++) {
                if (i % j == 0) {
                    s += j;
                }
            }
            if (s == i) {
                System.out.print(s + " = 1");
                for (int j = 2; j = i / 2; j++) {
                    if (i % j == 0) {
                        System.out.print(" + " + j);
                    }
                }
                System.out.println();
            }
        }
    }
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15221/showart_1732055.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP