题目描述
给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:
1,3,4,9,10,12,13,…
(该序列实际上就是:3^0,3^1,3^0 3^1,3^2,3^0 3^2,3^1 3^2,
3^0 3^1 3^2,…)
请你求出这个序列的第n项的值(用10进制数表示)。
分析:
对于任意阶n, 由k的n阶(小于n阶)次幂组成的序列为:
0*k^n 0*k^(n-1) ...
1*k^0 , 0*k^n 0*k^(n-1) ...
1*k^1
0* k^0 , ...,
1*k^n
1*k^(n-1) ...
1* k^0
上面是一个二项式的完全表达式, 对于n,每个项由(n 1)个系数项组成:bit表示为[b0...1, b1...1], 共2^(n 1) -1 项
对于序列的第n项,如果n表示为(p1*2^0 p2*2^1 ...pt*2^(t-1) )
那么序列的第n项的值表示为 p1*k^0 p2*k^1 ... pt*k^(t-1)
实现:
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
-
#include <math.h>
-
-
-
unsigned long seriesn (unsigned int key, unsigned int n)
-
{
-
unsigned long sc = 1;
-
unsigned long ret = 0;
-
-
while (n > 0)
-
{
-
ret = (n & 0x01) > 0 ? sc : 0;
-
sc *= key;
-
n = n >> 1
-
}
-
-
return ret;
-
}
阅读(2281) | 评论(0) | 转发(0) |