1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | /**************************************************************** * Description: 顺序打印因数 * Author: Alex Li * Date: 2023-08-16 06:46:49 * LastEditTime: 2023-09-13 05:59:07 ****************************************************************/ #include <iostream> using namespace std; int main(){ int n; cin >> n; vector<int> fac; //定义一个动态数组 //sqrt(n)是取n的平方根,如果是小数,就用ceil上取整数,并把结果类型转成整数 //fac.reserve是根据括号内的值保留数组空间。 fac.reserve((int)ceil(sqrt(n))); int i; //将1~i(i*i<n)内所有n的整数因子按顺序存到fac数组里面。 for (i = 1; i * i < n; ++i){ if (n%i==0){ //空1,看i是否是n的因数 fac.push_back(i); } } //输出fac数组内的整数,因数是从小到大 for (int k = 0; k < fac.size(); ++k){ cout <<fac[k] << " "; //空2,输出因数 } //如果n有整数平方根,输出。这里i在上一个循环结束时,是i*i不小于n,所以有可能i*i==n if (i*i==n) { //空3 cout << i << " "; //空4,l输出n的平方根 } //因为题目要求是从小到大打印因数,所以i~n里的因数,用n/fac[k],k从大的开始,这样出来的是升序。 for (int k = fac.size() - 1; k >= 0; --k){ cout << n/fac[k]<< " "; //空5,输出大于sqrt(n)的因数 } } |