rendered paste body// Dzielni Baloniarze, zad018
#include <iostream>
#define TEST
#define MaxN 10000
#define MaxLP 1300
using namespace std;
int LP[MaxLP]; //tablica z liczbami pierwszymi
int DZ[MaxLP+1]; //tablica z dzielnikami
int FindLP(int *Tab, int r);
void GetDZ(int *Tab, int l);
int main()
{
int a; //rozpartywana liczba
int k = FindLP(LP,MaxN);
for(int i=0; i<=MaxLP; i++) DZ[i]=0;
for(int i=1; i<=10; i++)
{
scanf("%d",&a);
GetDZ(DZ,a);
}
int res = 1;
for(int i=0; i<k; i++)
res = (res*(DZ[i]+1))%10;
printf("%d",res);
/*for(int i=0; i<k; i++)
printf("%d ",LP[i]);
printf("\nK=%d\n",k);*/
/*for(int i=0; i<k; i++)
printf("%d ",DZ[i]);
printf("\n");*/
return 0;
}
/*
Znajduje liczby pierwsze od 1 do r, zapisuje do Tab,
zwraca ich ilosc
*/
int FindLP(int *Tab,int r)
{
int i,j,k;
bool koniec=false;
Tab[0]=2; Tab[1]=3; k=1;
for(j=5; Tab[k]<=r; j+=2)
{
koniec=false;i=0;
while((Tab[i]*Tab[i]<=j)&&(koniec==false))
{
if((j%Tab[i])==0) koniec=true;
i++;
}
if(koniec==false){
k++; Tab[k]=j;
}
}
return k;
}
/*
Rozklada liczbe 'l' na czynniki pierwsze,
i dodaje je do tablicy Tab,
indexy w LP odpowiadaja indeksom w Tab
*/
void GetDZ(int *Tab, int l)
{
int i=0;
while(l>1)
{
while(l % LP[i] == 0) { l=l/LP[i]; Tab[i]++;}
i++;
}
}