我有另一个有趣的编程/数学问题。
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,但这是我朋友很久以前告诉我的编程任务。现在我记得那个,并想知道如何做到这一点。如何处理?
答案 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