题目1081:递推数列
来源:互联网 发布:java 多个list合并 编辑:程序博客网 时间:2024/04/28 00:55
import java.util.*;public class Main {public static void main(String arg[]) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){int a0 = sc.nextInt();int a1 = sc.nextInt();int p = sc.nextInt();int q = sc.nextInt();int k = sc.nextInt();long answer = func1(a0,a1,p,q,k);System.out.println(answer%10000);}}public static int func1(int a0, int a1, int p, int q, int k) {if(k==1) return a1;if(k==0) return a0;int ak = p*func1(a0, a1, p, q, k-1)+q*func1(a0, a1, p, q, k-2);return ak;}}
2 使用大数循环,会超时
import java.math.BigInteger;import java.util.*;public class Main {public static void main(String arg[]) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){BigInteger a0 = BigInteger.valueOf(sc.nextInt());BigInteger a1 = BigInteger.valueOf(sc.nextInt());BigInteger p = BigInteger.valueOf(sc.nextInt());BigInteger q = BigInteger.valueOf(sc.nextInt());BigInteger k = BigInteger.valueOf(sc.nextInt());BigInteger answer;BigInteger a2;if(k.equals(BigInteger.valueOf(1))) answer = a1;else if(k.equals(BigInteger.valueOf(0))) answer = a0;else{for(int i=2;;i++){a2 = p.multiply(a1).add(q.multiply(a0));a0=a1;a1=a2;if(k.equals(BigInteger.valueOf(i))) {answer = a2;break;}}}System.out.println(answer.remainder(BigInteger.valueOf(10000)));}}}
3 考虑到
import java.util.*;class rec{int a11;int a12;int a21;int a22;}public class Main {public static void main(String arg[]) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){int a0 = sc.nextInt();int a1 = sc.nextInt();int p = sc.nextInt();int q = sc.nextInt();int k = sc.nextInt();int answer;if(k==0) answer = a0;else if(k==1) answer = a1;else {rec first = new rec();first.a11=0;first.a12=1;first.a21=q;first.a22=p;rec t = matrixPow(first, k-1);answer = t.a21*a0+t.a22*a1;}System.out.println(answer%10000);}}public static rec mutiply(rec r1,rec r2 ){ rec x = new rec();; x.a11=0; x.a12=0; x.a21=0; x.a22=0; x.a11 = (r1.a11*r2.a11+r1.a12*r2.a21)%10000; x.a12 = (r1.a11*r2.a12+r1.a12*r2.a22)%10000; x.a21 = (r1.a21*r2.a11+r1.a22*r2.a21)%10000; x.a22 = (r1.a21*r2.a12+r1.a22*r2.a22)%10000; return x; } public static rec matrixPow(rec r,int k) { rec temp; if(k==1) return r; if(k==2) return mutiply(r,r); else { if(k%2==0) { temp = matrixPow(r ,k/2); temp = mutiply(temp,temp); return temp; } else { temp = matrixPow(r ,k/2); temp = mutiply(temp ,temp); temp = mutiply(temp,r); return temp; } } }}
0 0
- 题目1081:递推数列
- 题目1081:递推数列
- 题目1081:递推数列
- 题目1081:递推数列
- 题目1081:递推数列
- 题目1081:递推数列
- 九度OJ 题目1081:递推数列
- 九度OJ题目1081:递推数列-快速幂
- 九度 oj 题目1081:递推数列
- 九度OJ题目1081:递推数列解题报告
- 九度OJ 1081: 递推数列
- 清华大学2009年机试-递推数列-1081
- 递推-------fibnacci数列
- 递推数列
- OJ_1081 递推数列
- poj2590steps数列递推
- 递推数列
- HDU 1143 【递推】【数列】
- CreateFile用法和例子
- oracle启动与关闭和 重启方式详解
- logstash与kafka
- Android逆向分析之dex2jar异常处理的几种情况
- UIAlertViewUIAlertView+UIActivityIndicatorView
- 题目1081:递推数列
- 二维数组与二级指针
- C#反射
- svn 恢复命令
- android选择器
- 深入理解指针—>结构体里的成员数组和指针
- ospf 学习笔记
- boost::bind
- 这里和大家分享一下SqlServer 分区遇到的问题 How to Remove (Undo) Table Partitioning