题目来源:码蹄集
https://matiji.net/exam/brushquestion/85/3181/1DC60EA6DF83A333301CFFE1407FBA59
时间限制:1000ms
内存限制:65535kb
题目描述:如果一个数除了自身之外的所有因数之和等于自身,我们就把这种数叫做“完美数”。如果一个数除了自身之外的所有因数之和小于这个数,且两者之差是原数的一个因数,就将这个数称为“近乎完美的”。现在给你一个数,让你判断这个数是否是“近乎完美的”。
输入格式:一行,一个正整数 。
输出格式:一行,如果 n 是近乎完美的,输出 `YES`,否则输出 `NO`。
输入样例:136
输出样例:YES
备注:136 除了自身之外的所有因数之和为 134,两者之差 2 是 136 的一个因数。
参考程序:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
ll n, sum = 0;
cin >> n;
for(int i = 1; i < n; ++i){
if(n % i == 0) sum += i;
}
if(sum < n && n % (n - sum) == 0)
cout << "YES" << endl;
else
cout << "NO" << endl;
}