题解 | #完全数计算# C++带注释

完全数计算

https://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84

#include <iostream>
using namespace std;

int main() {
    int n;
    int res = 0;
    cin >> n;
    for(int i=1; i<=n; i++){
        int j = i;
        // lim灵活设置约数查找的边界,起到减枝和排除重复的作用。
        int tp = 0,lim = j;
        for(int t=1; t<lim; t++){
            if(t*(j/t) == j){
                if(t == 1){
                    tp += 1;
                }else{
                    tp += t + (j/t);
                    // 一旦符合条件就调整边界。
                    lim = (j/t);
                }
            }
            if(tp > j){
                break;
            }
        }

        if(tp == j){
            res++;
            // cout << j << endl;
        }
    }
    cout << res <<endl;


    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

头像
09-29 16:18
门头沟学院 Java
点赞 评论 收藏
分享
有趣的牛油果开挂了:最近这个阶段收到些杂七杂八的短信是真的烦
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务