원래의 질문에 링크 : 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..
주요 단어 :
- 나머지는 계산 될 수있다
- 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;