HDU---2802

Description

 
Giving the N, can you tell me the answer of F(N)?

Input

Each test case contains a single integer N(1<=N<=10^9). The input is terminated by a set starting with N = 0. This set should not be processed.

Output

For each test case, output on a line the value of the F(N)%2009.

Sample Input

1
2
3
0

Sample Output

1
7
20
因为这一个是对2009取余数,数据并且又比较大,所以会有规律,也就是先打表到4018,然后那对4018取余数
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<iostream>
using namespace std;
#define N 110
#define INF 0x3f3f3f3f
double p[N];
int m[N];
double dp[N*N];
int f[5100];
int get(int x)
{
    int r1=((x*x)%2009*x)%2009;
    int y=x-1;
    int r2=((y*y)%2009*y)%2009;
    return ((f[x-2]+r1)%2009+2009-r2)%2009;
}
int main()
{
    int i, n;
    f[1]=1;
    f[2]=7;
    for(i=3;i<=4018;i++)
    {
        f[i]=get(i);
    }
    while(scanf("%d", &n), n)
    {


        n=n%4018;
        if(n==0)
            printf("0\n");
        else
            printf("%d\n", f[n]);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值