基本思想:
因子分解问题:
质因子:一直除质数即可;
因子分解:进行1-sqrt(x)的遍历,但是一定要注意,当sqrt为整数时,例如2*2=4,就算因子个数,因子为2只能算一个;
关键点:
注意特殊情况;
#include<stdio.h> #include<stdlib.h> #include<iostream> #include<string> #include<vector> #include<algorithm> #include<map> using namespace std; vector<int>wnum; vector<int>ynum; void charge(int x) { int cnt = 1; int sqt = sqrt(x); for (int i = 2; i <= sqt; i++) { if (x%i == 0) { if (i == x / i) cnt++; else cnt +=i+x/i; } } if (cnt == x) { wnum.push_back(x); } else if (cnt > x) { ynum.push_back(x); } } int main() { for (int i = 2; i < 61; i++) { charge(i); } printf("E:"); for (int i = 0; i < wnum.size(); i++) { cout << " " << wnum[i]; } cout << endl; printf("G:"); for (int i = 0; i < ynum.size(); i++) { cout << " " << ynum[i]; } cout << endl; return 0; }
清华大学机试 完数VS盈数 Easy *注意下质因子和因子分解问题
原文:https://www.cnblogs.com/songlinxuan/p/12405769.html