题目:https://www.nowcoder.com/practice/ccc3d1e78014486fb7eed3c50e05c99d?tpId=40&tqId=21351&tPage=2&rp=2&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking
参考:https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E6%95%B0/370913?fromtitle=%E5%AE%8C%E6%95%B0&fromid=10876772

这道题主要是概念,上百度百科查了一下完数的详细概念就一遍过了

代码

  1. #include <cstdio>
  2. #include <vector>
  3. #include <cmath>
  4. using namespace std;
  5. vector<int> get_factor(int a){
  6. vector<int> res;
  7. for(int i = 1; i < a; i++){
  8. if(a % i == 0){
  9. res.push_back(i);
  10. /*while(a % i == 0){
  11. a /= i;
  12. }*/
  13. }
  14. }
  15. return res;
  16. }
  17. int judge(vector<int> v, int a){
  18. int sum = 0;
  19. for(int i = 0; i < v.size(); i++){
  20. sum += v[i];
  21. }
  22. if(a == sum) return 2;
  23. else if(a < sum) return 1;
  24. else return 0;
  25. }
  26. int main(){
  27. vector<int> E, G;
  28. for(int i = 2; i <= 60; i++){
  29. if(judge(get_factor(i), i) == 2) E.push_back(i);
  30. else if(judge(get_factor(i), i) == 1) G.push_back(i);
  31. }
  32. printf("E:");
  33. for(int i = 0; i < E.size(); i++){
  34. printf(" %d", E[i]);
  35. }
  36. printf("\nG:");
  37. for(int i = 0; i < G.size(); i++){
  38. printf(" %d", G[i]);
  39. }
  40. }