数字序列

来源:互联网 发布:新田惠海 知乎 编辑:程序博客网 时间:2024/05/22 07:59

题目描述

数字序列定义如下:
f(1)= 1,f(2)= 1,f(n)=(A * f(n-1)+ B * f(n-2))% 7。
给定A,B和n,你要计算f(n)的值。

输入

输入由多个测试用例组成。 每个测试用例在单行(1 <= A,B <= 1000,1 <= n <= 100,000,000)中包含3个整数A,B和n。
 三个零信号表示输入的结束,此测试用例不被处理。

输出

对于每个测试用例,在单行上打印f(n)的值。

样例输入

1 1 31 2 100 0 0

样例输出

2

5

import java.util.*;public class Main {    static Scanner in=new Scanner(System.in);    static int a,b,n;    static int[] f = new int[50];public static void main(String[] args) {while(in.hasNext()){a= in.nextInt();b= in.nextInt();n=in.nextInt();  if(a==0&&b==0&&n==0)   break;           f[0]=0;           f[1]=f[2]=1;           for(int i=3;i<=49;i++){          f[i]=(a*f[i-1]+b*f[i-2])%7;           }     System.out.println(f[n%49]);         }}}
分析:这个题暴力输出必然超时,由于题目取7的模,结果只有0到6七种情况,由题目给出的式子可知一共有7*7=49种情况,

那么49之后必然会形成循环,所以此题得解

数据量很大的话,必然是有规律的啊,不然怎么解决来