求正整数K的所有的次幂及所有有限的互不相等的次幂之和构成的递增数列;

      求正整数K的所有的次幂及所有有限的互不相等的次幂之和构成的递增数列

      直接上题:输入K和N ,求K的次幂的及其有限各个次幂之和的序列的第N个的值;
                 序列参考:K=3时,         1 . 3  . 4  . 9  . 10 . 12 . 13 ......
看到题目,一想的就是组合搜索求解法,即求K^0,再搜K^2,及其组合,,,,,如此如此。
但这种方法易在组合时出错;
    而且 我没想出来。。。。就换了一种思路
#include
#include
#include
using namespace std;

long long  a[11];
int k,n;

int main(){
	long long sum=0;                        //输入基数K,序数N, 
	int i=0;				// 求解 k的个各次幂 组成的递增序列中的 
	cin>>k>>n;				// 第N个数; 
	for( i=0;i<11;i++)			//例 输入 3 100 ,输出第100个数 981;	
	 	a[i]=(int)pow(k,i);
	i=0; 
	do{
	
		sum+=a[i]*(n&1);     	//我的思路: 首先推出序列的排列顺序, 
		n>>=1,i++;		// 1.第M个数的值 一定大于之前的值 ; 
	}while(n>0); 			//2.在 值为k^x的数前的数,小于k^x; 
	cout<(k^(x-1)-1)/(k-1)即k^x的值一定排在 
	return 0; 			//k^(x-1)的组合值之后,而且可以
}   					//推出相邻(没有比他小的);	
					//4.在看排列组合的规律,发现规律:
					// 第N个       K的二进制        各个次幂的排列组合(K^0+K^1+K^2+K^3) 
					//  1            0001			1000
					//  2            0010           0100
					//  3            0011 			1100
					//  4            0100           0010
					//发现可以用二进制N表示排列组合的各个系数,所以可以直接用N计算; 


你可能感兴趣的:(求正整数K的所有的次幂及所有有限的互不相等的次幂之和构成的递增数列;)