Number Sequence

题目描述

A number sequence is defined as follows:
 f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 
Given A, B, and n, you are to calculate the value of f(n).

输入

The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.

输出

For each test case, print the value of f(n) on a single line .

示例输入

1 1 3
1 2 10
0 0 0

示例输出

2
5

来源

ZJCPC2004

思路:


 1,题解

         该题看似复杂,实则不然;关键的解题的点就在题干处的“mod7”,并且在题干处表明n的取值在1~100000000之间,又因为时间在1000m之内,因此在题目中必定有循环,而找到循环点就是解题的关键。

2,找循环节长度:

      在找节点时并非非要找到循环点,而是要在最快的时间里找到最容易找到的循环节点;因为是“mod7”,故循环的节点一定与“7”有关,而因为题目中是由“A”,“B”来求得f(n)的值,故可知一个完整循环节的长度为49。

3,确定f(0)的可能值:

    在找到循环结长度后,因为题干中只给了f(1),f(2)的值,故在循环中,是无法计算上f(0)的取值的,因此在最后输出时,应当是输出f(n%(49-1【将初始循环时的f(0)除去】)+1(在除去后n变为n-1故要加一))。

代码



<pre name="code" class="cpp">#include<stdio.h>  
#include<string.h>  
int main()  
{  
    int a,b,n,i;  
    int f[49];  
    while(1)  
    {  
        scanf("%d%d%d",&a,&b,&n);  
        if(a==0&&b==0&&n==0)  
            break;  
  
        f[1]=1;  
        f[2]=1;  
        for(i=3; i<=48; i++)  
        {  
  
            f[i]=(a*f[i-1]+b*f[i-2])%7;  
  
  
        }  
        printf("%d\n",f[(n-1)%48+1]);  
    }  
    return 0;  
}  



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值