暴力解法求完全数
完全数计算
http://www.nowcoder.com/questionTerminal/7299c12e6abb437c87ad3e712383ff84
#include <iostream> #include <math.h> #include <vector> using namespace std; bool isPerfect(int n) { /* 28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。 首先求约数,然后约数相加 用一个vector来存放所有的约数 */ vector<int> factors; for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) { if (i == n / i) factors.push_back(i); else { factors.push_back(i); factors.push_back(n / i); } } } factors.push_back(1); int sum = 0; for (int i = 0; i < factors.size(); i++) sum += factors[i]; if (sum == n) return true; return false; } int main() { int n; while (cin >> n) { /* 第一种办法:一个一个算 */ int count = 0; for (int i = 2; i <= n; i++) if(isPerfect(i)) count++; cout << count << endl; } }