SIGSEGV in spoj problem PRIMEZUK


#include<stdio.h>
#include<stdlib.h>
int main()
{
int t,k;
scanf("%d",&t);
for(k=1;k<=t;++k)
{
int n,tmp;
long long int m=1;
scanf("%d",&n);
long long int i,j;
for(i=1;i<=n;++i)
{
if(i==n)
{
scanf("%d",&tmp);
m*=tmp;
}
else
{
scanf("%d ",&tmp);
m*=tmp;
}
}
m+=1;
int sieve;
sieve=(int
)malloc((m+5)sizeof(int));
for(i=2;i<=m;++i)
sieve[i]=0;
for(i=2;i
i<=m;++i)
{
for(j=i*i;j<=m;j+=i)
{
sieve[j]=-1;
}
}
for(i=m;i>=2;–i)
{
if(sieve[i]==0)
{
if(m%i==0)
{
printf(“Case #%d: %d\n”,k,i);
break;
}
}
}
}
return 0;
}