数字等于其数字的幂的总和

时间:2012-04-23 19:33:48

标签: algorithm discrete-mathematics

我有另一个有趣的编程/数学问题。

For a given natural number q from interval [2; 10000] find the number n
which is equal to sum of q-th powers of its digits modulo 2^64.

例如:for q=3, n=153; for q=5, n=4150

我不确定这个问题是否更适合math.se或stackoverflow,但这是我朋友很久以前告诉我的编程任务。现在我记得那个,并想知道如何做到这一点。如何处理?

1 个答案:

答案 0 :(得分:0)

这是一个强力解决方案,它将解决所有这样的n,包括1和任何其他n大于你选择的范围内的第一个(在这种情况下,我选择base ^ q作为我的范围限制)。您可以修改以忽略1的特殊情况,也可以在第一个结果后返回。它在C#中,但在使用**指数运算符的语言中可能看起来更好。您也可以将q和base作为参数传递。

int q = 5;
int radix = 10;
for (int input = 1; input < (int)Math.Pow(radix, q); input++)
{
    int sum = 0;
    for (int i = 1; i < (int)Math.Pow(radix, q); i *= radix)
    {
        int x = input / i % radix;       //get current digit
        sum += (int)Math.Pow(x, q);      //x**q;
    }
    if (sum == input)
    {
        Console.WriteLine("Hooray: {0}", input);
    }
}

因此,对于q = 5,结果是:

Hooray: 1
Hooray: 4150
Hooray: 4151
Hooray: 54748
Hooray: 92727
Hooray: 93084