나는이 프로그램을 상응하는 반복으로 수정하려고하지만 아직까지는 아직 초보자이기 때문에 숫자를 주요 인자로 분해하는 알고리즘을 사용하기 때문에 매우 어려워진다. 여기 코드 :반복적 인 등가 재귀 알고리즘
#include <iostream>
#include <map>
#include <cmath>
std::map< int, std::pair<int, int> > decompositions;
void descompon_number(int num, int root, int i = 2)
{
auto iterator = decompositions.find(num);
if (iterator == decompositions.end())
{
if (num > 1 && i <= root)
{
if (num % i == 0)
{
int n = num/i;
decompositions[num] = std::make_pair(i, n);
descompon_number(n, (int) std::sqrt(n));
}
else
descompon_number(num, root, i + 1);
}
else
decompositions[num] = std::make_pair(num, 1);
}
}
void show(int num, int factor, int exponent, int see)
{
auto pair = decompositions[num];
if (num <= 1 || factor != pair.first)
{
if (see)
std::cout << factor;
if (exponent > 1 && see)
std::cout << "^" << exponent;
if (pair.first > 1 && see)
std::cout << " * ";
exponent = 0;
}
if (num > 1)
show(pair.second, pair.first, exponent + 1, see);
}
void descompon(int a, int b, int see)
{
if (a <= b)
{
descompon_number(a, (int) std::sqrt(a));
if (see)
std::cout << a << " = ";
show(a, decompositions[a].first, 0, see);
if (see)
std::cout << std::endl;
descompon(a + 1, b, see);
}
}
int main()
{
descompon(2, 100, 1);
return 0;
}
누군가가 반복적으로 매우 복잡하지 않습니다이
[이] (http://stackoverflow.com/a/27660881/862351) 도움이 될 수 있습니다. (부인 : 링크 된 답변을 썼습니다.) – Pradhan
알고리즘이 작동하는 방식을 이해하는 데 어려움을 겪고 있지만, 한 가지만 알고 있습니다. 5-10 줄의 코드처럼 훨씬 쉽습니다. 그 경우에 – wvdz
나는 그것을 빨리 의심하지 않는다 – CooperJames