• 【rlz01】完全数


    Time Limit: 3 second
    Memory Limit: 2 MB

    问题描述

    所谓完全数,就是这个数除了它本身的约数之和也等于这个数,比如说6的约数有1、2、3,而1+2+3=6,所以6是个完全数。
    编程输入一个整数n,如果n是完全数输出Yes,否则输出No。

    Sample Input

    6
    Sample Output

    Yes
    Sample Input

    100
    Sample Output

    No

    【题目链接】:http://noi.qz5z.com/viewtask.asp?id=rlz01

    【题解】

    枚举n的因子(1..sqrt(n))就好;
    i*i的只能算一次,1的话n/1不能算,因为不能为本身;

    /*
        n非常大的话有个数论的结论;
        即对于一个梅森素数mp = 2^p - 1,必有 一个完全数 2^(p-1) * mp;
        比如:p=3
        Mp=2^3-1=7也是素数
        则有完全数2^(3-1)*(2^3-1)=4*7=28
        所以枚举p,如果p是质数,就能搞到一个完全数
    */


    【完整代码】

    #include <iostream>
    #include <cmath>
    #include <cstdio>
    
    using namespace std;
    
    int n;
    
    int main()
    {
        cin >> n;
        int maxl = sqrt(double(n));
        int sum = 0;
        for (int i = 1;i <= maxl;i++)
            if (n%i==0)
            {
                sum+=i;
                if ((n/i)!=i && i!=1)
                    sum+=(n/i);
                if (sum > n)
                {
                    puts("No");
                    return 0;
                }
            }
        if (sum < n)
            puts("No");
        else
            puts("Yes");
        return 0;
    }
  • 相关阅读:
    ServletConfig类
    坑爹的去哪儿网订酒店经历
    python + opencv + pycharm +语音生成
    最近看到的工作要求
    pip in windows
    路由器外接硬盘做nas可行吗?
    阅读201706
    scrum学习
    学习concurrency programming进展
    Reactor/Proactor的比较 (ZZ)
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626958.html
Copyright © 2020-2023  润新知