数列

给定a,b和递推式

x[1]=1

x[n]=a*x[n-1]+b

小y想知道,当n无穷大时,x[n]是否无穷大?

输入:

给定A,B,题意中a=A/1e9,b=B/1e9

输出:

一行一个yes或no

样例输入:

0 1

2000000000 1

输出:

no

yes

 

a=1时,判断b是否为0就行

x[n]=a*x[n-1]+b

x[n]+b/(a-1)=a*(x[n-1]+b/(a-1))

x[n]+b/(a-1)=a^n*(1+b/(a-1))

x[n]=(a^n(a+b-1)-b)/(a-1)

现在就很好做了,分类讨论

注意不要把把A,B除了,会有精度问题,直接把1e9作基准

其实还有简单的方法,算出来:

x[n]=a^n+b*a^(n-1)+b*a^(n-2).......+b

x[n]=a^n+b*(a^n-1)/(a-1)

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 using namespace std;
 6 double a,b;
 7 int main()
 8 {
 9  while (cin>>a>>b)
10  {
11   a=a;
12   b=b;
13   //printf("%.9lf %.9lf\n",a,b);
14   if (a>=0&&a<1e9)
15     {
16       printf("no\n");
17     }
18   if (a==1e9)
19     {
20       if (b!=0)
21       printf("yes\n");
22       else printf("no\n");
23     }
24   if (a>1)
25     {
26       if (b!=1e9-a)
27       printf("yes\n");
28       else printf("no\n");
29     }
30   if (a==-1e9)
31     {
32       printf("no\n");
33     }
34   if (a<0&&a>-1e9)
35     {
36       printf("no\n");
37     }
38   if (a<-1e9)
39     {
40       if (b!=1e9-a)
41     printf("yes\n");
42       else printf("no\n");
43     }
44  }
45 }

 

posted @ 2017-09-29 07:55  Z-Y-Y-S  阅读(196)  评论(0编辑  收藏  举报