iNOC产品部--完全数计算

iNOC产品部--完全数计算

http://www.nowcoder.com/questionTerminal/7299c12e6abb437c87ad3e712383ff84

只计算一遍500000以内的个数也容易超时的可能原因(自负的我认为第二种可能性更大):

  1. 算法的时间复杂度太大
  2. 题目有点问题,说明实际测试的数应该明显小于500000.
    实际只有以下4个数:6 28 296 8128 暴力破解也OK
#include <iostream>
#include <cmath>
using namespace std;

bool isPerf(int n)
{
    int sum = 1;
    int t = sqrt(n);
    for(int i = 2; i <= t; i++){
        if(n%i == 0) sum += i + n/i;
    }
    if(sum == n) return true;
    return false;
}

int main()
{
    int n = 0;
    int mp[500001];
    mp[1] = 0;
    for(int i = 2; i <= 100001; i++)
    {
        if(isPerf(i)) mp[i] = mp[i-1]+1;
        else mp[i] = mp[i-1];
    }
    while(cin >> n)
    {
        cout << mp[n] << endl;
    }
    return 0;
}

https://github.com/ultraji/nowcoder

全部评论
大神,那6 28 296 8128 这4个数是怎么知道的。
点赞 回复 分享
发布于 2021-03-18 15:39

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务