블루 브릿지 컵 유도 훈련

원래의 질문에 링크 : http://lx.lanqiao.cn/problem.page?gpid=T4

시작 훈련 : 피보나치 시리즈 설명

열 번호 피보나치 재귀 식 : FN = FN-1 + FN -2, F1 = F2 = 1이다. n이 상대적으로 큰 경우, FN은 매우 좋은이며, 지금 우리가 알고 싶은, FN은 10007이 숫자로 나누어진다. 입력 입력 설명 :
입력은 정수 n을 포함한다.
시료 입력 :
10
출력 설명 :
출력 라인을 포함하는 정수는 FN은 분할 10007의 나머지를 나타낸다.
설명 :이 문제에 대한 대답은 우리가 나머지가 될 수있는만큼이 밖으로을 파악할 수 있도록 FN이 직접 계산을 인수하기 위해 그 결과를 숫자 10007를 나누어 계산 FN의 정확한 값을 계산 할 필요없이, 10007로 나눈 필요로하는 것입니다 나머지는 종종 처음 계산보다 다음 원래 번호는 나머지 간단한을.
출력 샘플 :
55
시간 제한 : 1.0s
메모리 한계 : 256.0MB
1 <= N - <= 1,000,000..

주요 단어 :

  1. 나머지는 계산 될 수있다
  2. FN의 정확한 값을 계산 할 필요가 없습니다

문제 해결 아이디어 :

         加法和对数取余的结果与分开取余的结果相同
         即:(a + b) % c == a % c + b % c
         you can try it:
                  (3 + 4) % 2 = 1
                  3 % 2 = 1   plus   4 % 2 = 0  is 1,   so it's right!

코드 표시

#include <stdio.h>
int main(void)
{
    int i, index, i_num;
    int F_num1 = 1, F_num2 = 1; 
    scanf("%d", &i_num);//n表示要求的第n项 
    if(i_num == 1 || i_num == 2)
        printf("%d\n", F_num1);
    else if(i_num >= 3)
    {
          for(i = 3; i <= i_num; i ++)
          {
                 index = F_num2;
                 F_num2 = (F_num1 + F_num2) % 10007;//此处是重点哦
                 F_num1 = index;
          }
   
          printf("%d\n", F_num2);
    }
   
   return  0;

이해하지 않는 경우, 아래의 메시지를 남겨 오신 것을 환영합니다

출시 두 원저 · 원 찬양 한 · 전망 (110)

추천

출처blog.csdn.net/mango660/article/details/104089687