#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <mpi.h>

#define N 100000000


int funkcija(long x)
{
    int *niz;

    long long temp = x * x;
    int broj_cifara = 0;
    while(temp > 0)
    {
        temp = temp / 10;
        broj_cifara++;
    }

    niz = (int *)calloc(sizeof(int),broj_cifara);

    temp = x * x;

    int pom;
    int i = broj_cifara;
    while(temp > 0)
    {
        pom = temp % 10;

        niz[--i] = pom;

        temp = temp / 10;
    }

    int desni=0;
    int levi=0;

    int d_brojac;
    int l_brojac;

    int d_stepen = 1;
    int l_stepen = 1;

    for(i = 0;i<broj_cifara;i++)
    {
        l_stepen = pow(10,i);
        l_stepen = l_stepen / 10;
        for(l_brojac=0;l_brojac<i;l_brojac++)
        {
            levi += niz[l_brojac] * l_stepen;
            l_stepen = l_stepen / 10;
        }
        for(d_brojac = broj_cifara -1;d_brojac >= i;d_brojac--)
        {
            desni += niz[d_brojac] * d_stepen;
            d_stepen = d_stepen * 10;
        }
        if(levi + desni == x)
        {
            printf("%ld jeste ovaj broj\n",x);
            return 1;
        }
        levi = 0;
        desni = 0;
        d_stepen = 1;
        l_stepen = 1;
    }
}


int main(int argc, char **argv)
{
    MPI_Init(&argc,&argv);
    int rank,size;
    double pocetak, kraj;
    pocetak = MPI_Wtime();
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);
    MPI_Comm_size(MPI_COMM_WORLD,&size);

    int i;
    for(i = 1 + rank;i < N;i+= size)
    {
        funkcija(i);
    }

    kraj = MPI_Wtime();
    if(rank == 0)
    {
        printf("%f - toliko dugo \n",kraj - pocetak);
    }
    MPI_Finalize();

}
