Cod sursa(job #2262574)

Utilizator vlad_schillerSchiller Vlad Radu vlad_schiller Data 17 octombrie 2018 17:03:46
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.78 kb
#include <iostream>
#include <fstream>
#define mod 666013
using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
int n;
class matrix
{
private:
    int n,m;
public:
    int **a;
    matrix(int l,int c)
    {
        n=l;
        m=c;
        a= new (int*);
        n;
        for(int i=0; i<n; i++)
            a[i]=new int[m];
    }
    ~matrix()
    {
        for(int i=0; i<n; i++)
            delete a[i];
        delete a;
    }
    void citire()
    {
        for(int i=0; i<n; i++)
            for(int j=0; j<m; j++)
                f>>a[i][j];
    }
    void afisare()
    {
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
                cout<<a[i][j]<<" ";
            cout<<"\n";
        }
    }
    matrix& operator*=(int numar)
    {
        for(int i=0; i<n; i++)
            for(int j=0; j<m; j++)
                a[i][j]*=numar;
        return *this;
    }
    matrix& operator*=(matrix &y)
    {
        for(int i=0; i<n; i++)
            for(int j=0; j<m; j++)
            {
                int aux=0;
                for(int k=0;k<n;k++)
                    aux+=a[i][k]*y.a[k][j];
                a[i][j]=aux;
            }
        return *this;
    }
    matrix& operator%=(int numar)
    {
        for(int i=0; i<n; i++)
            for(int j=0; j<m; j++)
                a[i][j]%=numar;
        return *this;
    }
};
matrix unu(2,2), og(2,1);
unsigned long long int logp(matrix b,long long int exp)
{
    if(exp==1)
        return b%=mod;
    if(exp%2==1)
        return (b*logp(b,exp-1))%mod;
    else
        return logp((b*b)%mod,exp/2);
}

int main()
{
    f>>n;
    unu.a={{1,1},{1,0}};
    og.a={{1},{1}};
    unu.afisare();
    og.afisare();
    return 0;
}