【发布时间】:2016-12-28 21:50:15
【问题描述】:
我得到一个数字 p1^x1 * p2^x2 * .... 在地图中的素数分解。 我需要遍历它的所有因子,素数和复合因子。 我设法使用递归编写了一个解决方案。
#include <iostream>
#include <map>
#include <cstdlib>
using namespace std;
struct PROBLEM {
int mx = 400;
map<int, int> mp = {{2, 2}, {3, 1}, {5, 1}, {7, 2}};
int lastPrimeFactor = 7;
int num = 1;
auto solve() {
rec(2, 0);
return 0;
}
int next_prime_factor(int p) {
return (p == 2) ? 3 : (p == 3) ? 5 : (p == 5) ? 7 : -1;
}
void rec(int prime, int power) {
if (mx == 0) {
cout << "Infinite recursion\n\n";
exit(0);
} else --mx;
if (prime == lastPrimeFactor && power > mp[prime]) {
return;
}
if (power < mp[prime]) {
num *= prime;
cout << num << endl;
rec(prime, power + 1);
num /= prime;
}
if (prime != lastPrimeFactor) {
rec(next_prime_factor(prime), 0);
}
}
};
int main() {
PROBLEM().solve();
return 0;
}
问题:
1) 有没有更快的方法来生成这些因子?
2)如果可能的话,我可以用while循环替换递归吗?
【问题讨论】:
标签: c++ math recursion primes number-theory