指数序列

指数序列包括双指数与多指数,还可以引申出“指数积”,内容非常丰富;本节探讨双指数序列并引申至3指数序列,同时探讨应用多种思路与算法求解双指数序列;2-3指数序列设x,y为非负整数,试计算集合:M={ 2^x,3^y | x>=0,y>=0 }的元素由小到大排列的双指数序列第n项与前n项之和;1.递推设计要点:集合由2的指数与3的指数组成,实际上是给出两个递推关系,集合元素所构成的序列为2指数序列;设
摘要由CSDN通过智能技术生成

指数序列包括双指数与多指数,还可以引申出“指数积”,内容非常丰富;

本节探讨双指数序列并引申至3指数序列,同时探讨应用多种思路与算法求解双指数序列;


2-3指数序列

设x,y为非负整数,试计算集合:M={ 2^x,3^y | x>=0,y>=0 }的元素由小到大排列的双指数序列第n项与前n项之和;

1.递推设计要点:

集合由2的指数与3的指数组成,实际上是给出两个递推关系,集合元素所构成的序列为2指数序列;

设置变量f存储双指数升序序列的第k项,s存储前k项之和;

显然,第1项也是最小项为f=1(当x=y=0时),s=1;

从第2项开始,为了实现从小到大排序,设置a、b两个变量,相当于设置a、b两个队列:

  • a是2为底的指数队列,b是3为底的指数队列,显然a!=b

设置k循环(k=2,3,……,n,其中n为键盘输入整数),在k循环外赋初值:“a=2;b=3;”,在k循环中通过两个队列排头的比较选择赋值:

  • (1)、若a< b时,由赋值f=a确定为序列的第k项;然后a=a*2,即a按递推规律乘2,为后一轮比较做准备

  • (2)、若a> b时,由赋值f=b确定为序列的第k项;然后b=b*3,即b按递推规律乘3,为后一轮比较做准备

在这一递推过程中,变量a、b是变化的,分别代表2的指数与3的指数;

为标注第k项为指数的形式设置t:

  • t=2为2的指数,其指数为p2

  • t=3为3的指数,其指数为p3

2.双指数序列程序实现:

#include<stdio.h>
int main()
{
   int k,n,t,p2,p3;
   double a,b,s,f;
   printf("求序列的第n项与前n项和,请输入n:");
   scanf("%d",&n);
   s=1;
   a=2;
   b=3;
   p2=0;
   p3=0;
   for(k=2;k<=n;k++)
   {
      if(a<b)
      {
         f=a;
         a=a*2;
         t=2;              /*t=2表示2的指数,p2为指数*/
         p2++;
      }
      else
      {
         f=b;
         b=b*3; 
         t=3;              /*t=3表示3的指数,p3为指数*/
         p3++;
      }
      s+=f;
   }
   printf("序列的第%d项为:%.0f ",n,f);
   if(t==2)                /*对第n项进行标注*/
      printf("(2^%d) \n",p2);
   else
      printf("(3^%d) \n",p3);
   printf("序列的前%d项之和为: %.0f \n",n,s);
}

3.程序运行示例及其注意事项:

求序列的第n项与前n项和,请输入n:50
序列的第50项为:1162261467 (3^19)
序列的前50项之和为: 3890875846

注意:这一递推设计在一重循环中完成,时间复杂度与空间复杂度均为O(n)

4.拓广为3指数序列:

设a、b、c为彼此互质的正整数,x、y、z为非负整数,集合M为:

  • M={ a^x,b^y,c^z | x>=0,y>=0,z>=0 }

试计算M中有多少个元素处于指定区间[u,v]中,分别输出这些元素及其和,同时指出区间[u,v]中元素由小到大排列的第n项;

输入彼此互质的正整数a、b、c,同时输入区间下限与上限u、v以及指定项数n,输出处于区间[u,v]中的元素并统计其个数与和,同时输出区间中的元素升序列的第n项;

(1)、设计要点;

集合由指定底a、b、c的指数组成,实际上是给出3个递推关系,集合元素所构成的序列为3指数序列;

设置变量f存储3指数序列的各项,k统计区间[u,v]中的项数,s存储区间[u,v]中各项之和;

显然,第1项也是最小项为f=1(当x=y=z=0时),如果u=1时,项f=1在区间内,初值为:k=1,s=1;如果u>1时,项f=1不在区间内,初值为:k=0,s=0;

1)、循环设置;

设置永真循环,从第2项开始,为了实现从小到大排序,设置ax、bx、cx表征3个指数队列的3个变量:ax是底为a的指数队列,bx是底为b的指数队列,cx是底为c的指数队列,显然ax、bx与cx互不相等;

在循环外赋初值:ax=a;bx=b;cx=c;p1=p2=p3=0;

循环中通过各队列排头的比较选择赋值:

  • 若ax< bx且ax< cx时,由赋值f=ax确定为序列的项f;然后ax=ax*a,即ax

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值