题解 | #完全数计算#
完全数计算
https://www.nowcoder.com/practice/7299c12e6abb437c87ad3e712383ff84
这题的关键是对于完全数的判断,减少不必要的计算:
- 判断整数n是不是完全数的时候,当i能被n整除,n/i也能被n整除,相当于一次性得到两个约数,那么在判断出i是约数的时候可以在约数和sum里面同时加上i和n/i;
- 设置循环的上限max,当判断到i是约数的时候,那么比n/i大的数在前面判断中已经有结论,可以将上限设为n/i。
#include<bits/stdc++.h>
using namespace std;
bool isComplete(int n) {
int sum=1;
int max = n;
for (int i = 2; i < max; i++)
{
if (n%i == 0)
{
sum += i;
if (i != n / i)
{
sum += n / i;
}
max = n / i;
}
}
if (sum == n)
{
return true;
}
return false;
}
int main() {
int n;
cin >> n;
int count = 0;
if (n==1||n==2)
{
cout << 0;
}
else
{
for (int i = 3; i < n; i++)
{
if (isComplete(i)) {
count++;
}
}
cout << count;
}
return 0;
}

韶音科技公司氛围 643人发布