Problem 63 : Powerful digit counts
The 5-digit number, 16807=75, is also a fifth power. Similarly, the 9-digit number, 134217728=89, is a ninth power.
How many n-digit positive integers exist which are also an nth power?
C++ 代码
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
//#define UNIT_TEST
class PE0063
{
private:
const static int max_digits = 1000; // 10^100
int m_digitArray[max_digits];
void adjustMyDigitArray(int digitArray[]);
vector<int> getPowerDigits(int a, int b);
public:
int getNumOfnthPowerIntegers();
};
void PE0063::adjustMyDigitArray(int digitArray[])
{
for(int j=0; j<max_digits-1; j++)
{
digitArray[j+1] += digitArray[j]/10;
digitArray[j] %= 10;
}
}
vector<int> PE0063::getPowerDigits(int a, int b) // a^b
{
for(int j=0; j<max_digits; j++)
{
m_digitArray[j] = 0;
}
m_digitArray[0] = 1;
for(int i=1; i<=b; i++)
{
for(int j=0; j<max_digits; j++)
{
m_digitArray[j] *= a;
}
adjustMyDigitArray(m_digitArray);
}
int j;
for (j=max_digits-1; j>=0 && m_digitArray[j]==0; j--)
{
}
vector<int> digits_vec(j+1);
for (int i=0; i<=j;i++)
{
digits_vec[i] = m_digitArray[i];
}
return digits_vec;
}
int PE0063::getNumOfnthPowerIntegers()
{
int num_of_nth_power_integers = 0;
for (int y=1; y<100; y++)
{
for(int x=1; x<10; x++)
{
vector<int> digits_vec = getPowerDigits(x, y);
if (y == digits_vec.size())
{
num_of_nth_power_integers++;
#ifdef UNIT_TEST
copy(digits_vec.rbegin(), digits_vec.rend(),
ostream_iterator<int>(cout));
cout << " = " << x << "^" << y << endl;
#endif
}
}
}
return num_of_nth_power_integers;
}
int main()
{
PE0063 pe0063;
cout << pe0063.getNumOfnthPowerIntegers() << " n-digit positive";
cout << " integers exist which are also an nth power." << endl;
return 0;
}
Python 代码
def count_nth_power_integer():
nth_power_list = []
for a in range(1, 10):
for b in range(1, 30):
n = a**b
if len(str(n)) == b:
#print(n,"=", a, "^", b)
nth_power_list += [n]
return nth_power_list
def main():
nth_power_list = count_nth_power_integer()
print(len(nth_power_list), "n-digit positive integers exist", end=' ')
print("which are also an nth power.")
if __name__ == '__main__':
main()