1. 程式人生 > >一個正整數k(3≤k≤ 15),把所有k的方冪及所有有限個互不相等的k的方幕之和構成個通增的序列

一個正整數k(3≤k≤ 15),把所有k的方冪及所有有限個互不相等的k的方幕之和構成個通增的序列

提供一個演算法,其實由於是將有限個互不相等的k,所以我們這裡考察第n項的時候,能取到的最大的k的冪次,不妨設次數是p,那麼與之相關的很顯然應該有2^p個,於是就想到了其實an與k的次數是和n的二進位制有關的.
假設n=∑bk2k,bk=1或0.於是我們有an=∑(bk*k(k-1)).
比如說k=3,第7項,因為7對應的二進位制數是111(2),所以a7=1
32+1*31+13^0=13.
若為第11項,11對應的二進位制是1011(2),所以a11=1
33+0*32+1*31+1*30=31.

#include<stdio.h>
#include<math.h>
int main()
{int k,n,j=0;//基數,項數,結果 
printf("基數和項數:");
scanf("%d %d",&k,&n);
int a[100],i=0,b;
b=n;
while(b)
{a[i++]=b%2;
b/=2;
}
i--;
while(i>=0)
{j+=a[i]*pow(k,i);
i--;
 } 
 printf("基數是%d的第%d項是%d",k,n,j);
}
在這裡插入程式碼片

在這裡插入圖片描述