#include <array>
#include <iostream>
class FacTableEntry {
public:
constexpr FacTableEntry (unsigned int n) : m_num (n), m_fac (faculty (n)) {}
static constexpr unsigned int faculty (unsigned int n) {
return n == 1 ? 1 : faculty (n-1)*n;
}
unsigned int m_num, m_fac;
};
template <unsigned int N>
class FacTable {
public:
constexpr FacTable (std::array<FacTableEntry,N> entries) : m_data (entries) {}
std::array<FacTableEntry,N> m_data;
};
constexpr const FacTable<5> myFacTable {{{{1}, {2}, {5}, {7}, {15}}}};
int main () {
for (auto& entry : myFacTable.m_data)
std::cout << "fac(" << entry.m_num << ")=" << entry.m_fac << std::endl;
}
I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8aW9zdHJlYW0+CgpjbGFzcyBGYWNUYWJsZUVudHJ5IHsKICAgIHB1YmxpYzoKICAgICAgICBjb25zdGV4cHIgRmFjVGFibGVFbnRyeSAodW5zaWduZWQgaW50IG4pIDogbV9udW0gKG4pLCBtX2ZhYyAoZmFjdWx0eSAobikpIHt9CiAgICAgICAgCiAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnQgZmFjdWx0eSAodW5zaWduZWQgaW50IG4pIHsKICAgICAgICAgICAgcmV0dXJuIG4gPT0gMSA/IDEgOiBmYWN1bHR5IChuLTEpKm47CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHVuc2lnbmVkIGludCBtX251bSwgbV9mYWM7Cn07Cgp0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CmNsYXNzIEZhY1RhYmxlIHsKICAgIHB1YmxpYzoKICAgICAgICBjb25zdGV4cHIgRmFjVGFibGUgKHN0ZDo6YXJyYXk8RmFjVGFibGVFbnRyeSxOPiBlbnRyaWVzKSA6IG1fZGF0YSAoZW50cmllcykge30KICAgICAgICAKICAgICAgICBzdGQ6OmFycmF5PEZhY1RhYmxlRW50cnksTj4gbV9kYXRhOwp9OwoKY29uc3RleHByIGNvbnN0IEZhY1RhYmxlPDU+IG15RmFjVGFibGUge3t7ezF9LCB7Mn0sIHs1fSwgezd9LCB7MTV9fX19OwoKaW50IG1haW4gKCkgewogICAgZm9yIChhdXRvJiBlbnRyeSA6IG15RmFjVGFibGUubV9kYXRhKQogICAgICAgIHN0ZDo6Y291dCA8PCAiZmFjKCIgPDwgZW50cnkubV9udW0gPDwgIik9IiA8PCBlbnRyeS5tX2ZhYyA8PCBzdGQ6OmVuZGw7Cn0=