Na matemática, a Sequência de Fibonacci é uma sequência de números inteiros, começando normalmente por 0 e 1, na qual, cada termo subsequente corresponde a soma dos dois anteriores. A sequência recebeu o nome do matemático italiano Leonardo de Pisa, mais conhecido por Fibonacci, que descreveu, no ano de 1202, o crescimento de uma população de coelhos, a partir desta.
A sequência de Fibonacci tem aplicações na análise de mercados financeiros, na ciência da computação e na teoria dos jogos. Também aparece em configurações biológicas, como, por exemplo, na disposição dos galhos das árvores.
Os números de Fibonacci são, portanto, os números que compõem a seguinte sequência: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, …
Elabore um algoritmo que leia um valor k, onde k é o número de termos da sequência. Por exemplo, se o valor de k for 8, o termos serão 0, 1, 1, 2, 3, 5, 8, 13. Baseado nisso, se o k-ésimo termo for um número primo, mostre o maior valor par da sequência, caso contrário, mostre o somatório dos termos.
Exemplo:
Entrada: 8
o k-ésimo termo é o número 13, que é primo, então mostra o número 2 que é o maior número par dentro da sequência.
Entrada: 9
o k-ésimo termo é o número 21, que não é primo, então mostra 54 (0+1+1+2+3+5+8+13+21 = 54).
Solução em C/C++, sem utilizar função
#include <stdio.h>
int main(void) {
//já inicializou os dois primeiros termos
//soma começa em 1, que o somatório dos dois primeiros termos
int k, i, ult=1, pen=0, atual, termos, par, soma=1, primo=1;
scanf("%i", &k);
printf("%i %i ", pen, ult);
for (termos=3; termos<=k; termos++) {
atual = ult + pen;
pen = ult;
ult = atual;
printf("%i ", atual);
if (atual % 2 == 0) {
par = atual;
}
soma+=atual;
}
printf("\nSoma: %i \nMaior par: %i", soma, par);
//considero que o termo atual é primo e tento mostrar que não é
for (i=2; i<=atual/2; i++) {
if (atual%i == 0) {
primo = 0;
printf("\nDividiu por %i \n", i);
break; //já encontrei um outro numero divisível, posso parar
}
}
if (primo) {
printf("%i", par);
} else {
printf("%i", soma);
}
return 0;
}
Teste o código: http://ideone.com/0eqaiR