用java或C语言找到10000000以内的完美数

33 篇文章 0 订阅
3 篇文章 29 订阅
这篇博客介绍了如何使用Java和C语言计算完美数,完美数是其所有真因数之和等于自身的正整数。代码通过循环和素数判断函数找到小于10000000的完美数,包括已知的5个整型完美数6、28、496、8128和33550336。
摘要由CSDN通过智能技术生成

首先要知道完美数的计算公式,如果用循环来写会超时的计算公式:如果2^p-1为素数,那么(2^p-1)*(2^(p-1))为完美数,只需要去遍历p就可以了10000000万的话,遍历到30就妥妥的够了,注意结束条件不要因为相乘导致越界。下面是java和C语言实现的代码,语法相识,所以差不多。目前世界上已知的完美数为49个,整型范围内只有5个,如果没有其他方法可以打表输出,下面是整型范围内的5个完美数

6
28
496
8128
33550336

Java代码

package zhh_2;
import java.lang.Math;
public class wanMeiShu {
    static int Prime(int n) {
        if (n == 1)
            return 0;
        int k = (int)Math.sqrt(n);
        for (int i = 2; i <= k; i++)
            if (n % i == 0)
                return 0;
        return 1;
    }
    public static void main(String[] args) {
        for(int i=2;i<1000;i++){
            int k= (int) (Math.pow(2, i) - 1);
            if(Prime(k)==1){
                int x= (int) ( Math.pow(2, i - 1) * k);
                if(x<=10000000)
                    System.out.println(x);
                else break;
            }     
        }
    }
}

C语言代码

#include<stdio.h>
#include<math.h>
int Prime(int n) {
    if (n == 1)
        return 0;
    int k = (int)sqrt(n);
    for (int i = 2; i <= k; i++)
        if (n % i == 0)
            return 0;
    return 1;
}
int main()
{
	for(int i=2;i<1000;i++){
        int k= (int)(pow(2,i)-1);
        if(Prime(k)==1){
            int x= (int)(pow(2,i-1)*k);
            if(x<=10000000)
                printf("%d\n",x);
            else break;
        }     
    }
}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BayMin0520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值