ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 июля
684512 Топик полностью
fk0, легенда (02.07.2016 14:34, просмотров: 134) ответил Вова на F(10^6) имеет примерно 2*10^5 цифр. Зачем вам столько цифирей? Вы их солить собрались?
Твоя формула лажает уже начиная с 71-го члена ряда. Какие 10^5 цифр? 
$ gcc -Wall fib.c -lm -lgmp && ./a.out $(seq 70 80)
vova_fib(70) = 190392490709135
fib(70) = 190392490709135
---
vova_fib(71) = 308061521170130
fib(71) = 308061521170129
---
vova_fib(72) = 498454011879265
fib(72) = 498454011879264
---
vova_fib(73) = 806515533049395
fib(73) = 806515533049393
---
vova_fib(74) = 1304969544928660
fib(74) = 1304969544928657
---
vova_fib(75) = 2111485077978055
fib(75) = 2111485077978050
---
vova_fib(76) = 3416454622906716
fib(76) = 3416454622906707
---
vova_fib(77) = 5527939700884771
fib(77) = 5527939700884757
---
vova_fib(78) = 8944394323791488
fib(78) = 8944394323791464
---
vova_fib(79) = 14472334024676260
fib(79) = 14472334024676221
---
vova_fib(80) = 23416728348467744
fib(80) = 23416728348467685
#include <math.h> #include <stdio.h> #include <gmp.h> #include <stdlib.h> unsigned long long int fib( unsigned long long int n){ if(n == 0) return 0; else if(n == 1) return 1; else return fib(n-1)+fib(n-2); } void fib2( int n){ /* working numbers */ mpz_t a, b; //unsigned long long int N[2]; mpz_init (a); mpz_init (b); mpz_set_ui (a,1); mpz_set_ui (b,1); if(n == 0) printf("0\n"); else if(n == 1) printf("1\n"); else if(n == 2) printf("1\n"); else { mpz_t fib; mpz_init (fib); int i = 0; for(i=0;i<n-2;i++){ mpz_add (fib, a, b); mpz_set(a,b); mpz_set(b,fib); } gmp_printf ("%Zd\n",fib); } } double vova_fib(double x) { return pow(1+sqrt(5), x) / (pow(2,x)*sqrt(5)) - ( pow(1-sqrt(5), x) / (pow(2,x)*sqrt(5)) ); } int main(int argc, char *argv[]) { if (argc < 2) fprintf(stderr, "usage: %s number [numbers...]\n", argv[0]), exit(1); for (int n=1; n<argc; n++) { int x; if (sscanf(argv[n], "%i", &x)<1) fprintf(stderr, "not a number: %s\n", argv[n]), exit(1); printf("vova_fib(%d) = %.0lf\n", x, vova_fib(x)); printf("fib(%d) = ", x); fib2(x); puts("---"); } return 0; }
[ZX]