Dzień dobry
Mam problem z poniższym zadaniem. Po wrzuceniu rozwiązania do sprawdzarki "themis" otrzymuje 1 sprawdzenie pozytywne i 1 negatywne (wrong answer).
Treść zadania:
Dla danych n i m wyznacz fib(n) mod m
Wejście
W pierwszej linii wejścia podana jest liczba testów T (1 ≤ T ≤ 100). W następnych T wierszach podane są pary n, m (1 ≤ n,m ≤ 10^9).Przykład
Dla danych wejściowych:10
1 10
2 10
3 10
4 25
5 25
6 25
7 27
8 29
9 31
10 33
poprawną odpowiedzią jest:
1
1
2
3
5
8
13
21
3
22
Mój kod:
ps* sprawdzarka nie widzi cerr
#include <iostream>
using namespace std;
void FC1(unsigned long long F[2][2], unsigned long long M[2][2]);
void FC2(unsigned long long F[2][2], unsigned long long n);
unsigned long long fib(unsigned long long n)
{
unsigned long long F[2][2] = {{1,1},{1,0}};
if (n == 0)
return 0;
FC2(F, n-1);
return F[0][0];
}
void FC2(unsigned long long F[2][2], unsigned long long n)
{
if( n == 0 || n == 1)
return;
unsigned long long M[2][2] = {{1,1},{1,0}};
FC2(F, n/2);
FC1(F, F);
if (n%2 != 0)
FC1(F, M);
}
void FC1(unsigned long long F[2][2], unsigned long long M[2][2])
{
unsigned long long x = F[0][0]*M[0][0] + F[0][1]*M[1][0];
unsigned long long y = F[0][0]*M[0][1] + F[0][1]*M[1][1];
unsigned long long z = F[1][0]*M[0][0] + F[1][1]*M[1][0];
unsigned long long w = F[1][0]*M[0][1] + F[1][1]*M[1][1];
F[0][0] = x;
F[0][1] = y;
F[1][0] = z;
F[1][1] = w;
}
int main()
{
unsigned long long t;
unsigned long long n;
unsigned long long m;
cin>>t;
for(int i=0; i=t; i++)
{
cin>>n;
cin>>m;
cerr<<"Wynik: ";
cout<<fib(n)%m<<endl;
}
return 0;
}