题意:
链接:
给定一个正整数N(N < 2000000000),求N所有正约数。
解题思路:
10^9之内约数个数最多的数的约数个数为1536个。我们可以计算根号N的所有质数,进而求出其约数。
快速模拟一下:
例如:840,先分解质因数:
按照2、3、5、7依次排列求值,放入动态数组排序求值。
My Code:
#include <bits/stdc++.h>
using namespace std;
vector<int> Res;
int prime[110];
int e[110], Answer = 1, cnt = 1;
int pos = 0;
void SFS(int step) {
if (step > pos) {
Res.push_back(Answer);
return;
}
int mul = 1;
for (int i = 0; i <= e[step]; i++) {
Answer *= mul;
SFS(step + 1);
Answer /= mul;
mul *= prime[step];
}
return;
}
int main() {
int N;
cin >> N;
for (int i = 2; i * i <= N; i++) {
bool update = false;
if (N % i == 0) {
++pos;
prime[pos] = i;
}
while (N % i == 0) {
update = true;
e[pos]++;
N /= i;
}
if (update) {
cnt *= (e[pos] + 1);
}
}
if (N > 1) {
++pos;
prime[pos] = N;
e[pos]++;
cnt *= 2;
}
cout << cnt << "\n";
SFS(1);
sort(Res.begin(), Res.end());
for (auto i:Res) cout << i << ' ';
return 0;
}