#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<mpi.h>
int kaprekarov(long x)
{
    long pom = x;
    long gr = 1;
    while (pom > 0 )
    {
        gr*=10;
        pom/=10;
        //printf("Podeok je sad %ld\n",gr);
    }
    long long kv = x*x;
    //printf("kvadrat je %ld\n",kv);
    long desno = kv%gr;
    //printf("Desno je %ld\n",desno);
    long levo = kv/gr;
    //printf("Levo je sad %ld\n",levo);
    if(levo+desno == x)
    {
        //printf("Jeste\n");
        return 1;
    }
    return 0;
}
int main (int argc , char **argv)
{
    MPI_Init(&argc,&argv);
    
    int worldrank,worldsize;
    MPI_Comm_rank (MPI_COMM_WORLD,&worldrank);
    MPI_Comm_size (MPI_COMM_WORLD,&worldsize);
    long n = pow(10,8);
    long moj_deo = n/worldsize;
    long pocetak = worldrank*moj_deo+1 ;
    long gornjagr = (worldrank+1)*moj_deo;
    if(worldrank==worldsize-1)
    {
        gornjagr=n;
    }
    //printf("PROCES : %d - Moj deo je od : %ld do %ld\n",worldrank,pocetak,gornjagr);
    double starttime,endtime;
    starttime = MPI_Wtime();
   
    //printf("Pocetno vreme je : %f\n",starttime);
    for(long i = pocetak;i<gornjagr;i++)
    {
        if(kaprekarov(i))
        printf("%ld\n",i);
    }
    endtime=MPI_Wtime();
    
    //printf("zavrsno vreme je %f\n",endtime);
    //printf("That took %f seconds\n",endtime-starttime);
    MPI_Finalize();

}