#include<stdio.h>
#include<list>
#include<algorithm>
#define MAX 10000000
using namespace std;
long long primes[MAX],cost[MAX];
long long arr[355][355],row;
list <long long> rr,cc; //Row and column list to be used bfs
void sieve()
{
long long count=1;
for(long long i=0;i<MAX;i++)
primes[i]=1;
primes[0]=primes[1]=0;
for(long long i=2;i<MAX;i++)
{
if(primes[i])
{
primes[i]=count;
count++;
for(long long j=i*i;j<MAX;j+=i)
primes[j]=0;
}
}
}
void find_cost()
{
for(long long i=0;i<MAX;i++)
{
if(primes[i])
cost[i]=primes[i]-1;
else
{
if(i%2==0)
cost[i]=i/2;
else
cost[i]=(i+3)/2;
}
}
}
long long type_of_num(long long num) //checks number is even, odd or prime
{
long long type=0; //1 for prime, 2 for even and 3 for odd
if(primes[num])
type=1;
else
{
if(num%2==0)
type=2;
else
type=3;
}
return type;
}
void bfs(long long r,long long c) //start row and start column
{
rr.push_back(r);
cc.push_back(c);
while(!rr.empty())
{
r=rr.front();
c=cc.front();
long long type=type_of_num(arr[r][c]);
arr[r][c]=-1; //Present grid visited
rr.pop_front();
cc.pop_front();
if(r>0 && arr[r-1][c]!=-1 && type_of_num(arr[r-1][c])==type)
{
rr.push_back(r-1);
cc.push_back(c);
}
if(c>0 && arr[r][c-1]!=-1 && type_of_num(arr[r][c-1])==type)
{
rr.push_back(r);
cc.push_back(c-1);
}
if(r<row-1 && arr[r+1][c]!=-1 && type_of_num(arr[r+1][c])==type)
{
rr.push_back(r+1);
cc.push_back(c);
}
if(c<row-1 && arr[r][c+1]!=-1 && type_of_num(arr[r][c+1])==type)
{
rr.push_back(r);
cc.push_back(c+1);
}
}
}
int main()
{
long long test;
long long result;
sieve();
find_cost();
scanf("%lld",&test);
while(test--)
{
result=0;
scanf("%lld",&row);
for(long long i=0;i<row;i++)
for(long long j=0;j<row;j++)
scanf("%lld",&arr[i][j]);
for(long long i=0;i<row;i++)
{
//printf("\n");
for(long long j=0;j<row;j++)
{
//printf("%8lld ",cost[arr[i][j]]);
if(arr[i][j]!=-1) //-1 indicates already visited
{
result+=cost[arr[i][j]];
if(type_of_num(arr[i][j])!=1) //i.e. not prime
bfs(i,j);
else
arr[i][j]=-1;
}
}
}
printf("%lld\n",result);
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8bGlzdD4KI2luY2x1ZGU8YWxnb3JpdGhtPgojZGVmaW5lIE1BWCAxMDAwMDAwMAp1c2luZyBuYW1lc3BhY2Ugc3RkOwpsb25nIGxvbmcgcHJpbWVzW01BWF0sY29zdFtNQVhdOwpsb25nIGxvbmcgYXJyWzM1NV1bMzU1XSxyb3c7Cmxpc3QgPGxvbmcgbG9uZz4gcnIsY2M7CQkvL1JvdyBhbmQgY29sdW1uIGxpc3QgdG8gYmUgdXNlZCBiZnMKdm9pZCBzaWV2ZSgpCnsKCWxvbmcgbG9uZyBjb3VudD0xOwoJZm9yKGxvbmcgbG9uZyBpPTA7aTxNQVg7aSsrKQoJCXByaW1lc1tpXT0xOwoJcHJpbWVzWzBdPXByaW1lc1sxXT0wOwoJZm9yKGxvbmcgbG9uZyBpPTI7aTxNQVg7aSsrKQoJewoJCWlmKHByaW1lc1tpXSkKCQl7CgkJCXByaW1lc1tpXT1jb3VudDsKCQkJY291bnQrKzsKCQkJZm9yKGxvbmcgbG9uZyBqPWkqaTtqPE1BWDtqKz1pKQoJCQkJcHJpbWVzW2pdPTA7CgkJfQoJfQp9CnZvaWQgZmluZF9jb3N0KCkKewoJZm9yKGxvbmcgbG9uZyBpPTA7aTxNQVg7aSsrKQoJewoJCWlmKHByaW1lc1tpXSkKCQkJY29zdFtpXT1wcmltZXNbaV0tMTsKCQllbHNlCgkJewoJCQlpZihpJTI9PTApCgkJCQljb3N0W2ldPWkvMjsKCQkJZWxzZQoJCQkJY29zdFtpXT0oaSszKS8yOwoJCX0KCX0KfQpsb25nIGxvbmcgdHlwZV9vZl9udW0obG9uZyBsb25nIG51bSkJLy9jaGVja3MgbnVtYmVyIGlzIGV2ZW4sIG9kZCBvciBwcmltZQp7Cglsb25nIGxvbmcgdHlwZT0wOwkJLy8xIGZvciBwcmltZSwgMiBmb3IgZXZlbiBhbmQgMyBmb3Igb2RkCglpZihwcmltZXNbbnVtXSkKCQl0eXBlPTE7CgllbHNlCgl7CgkJaWYobnVtJTI9PTApCgkJCXR5cGU9MjsKCQllbHNlCgkJCXR5cGU9MzsKCX0KCXJldHVybiB0eXBlOwp9CnZvaWQgYmZzKGxvbmcgbG9uZyByLGxvbmcgbG9uZyBjKQkJLy9zdGFydCByb3cgYW5kIHN0YXJ0IGNvbHVtbgp7Cglyci5wdXNoX2JhY2socik7CgljYy5wdXNoX2JhY2soYyk7CgkKCXdoaWxlKCFyci5lbXB0eSgpKQoJewoJCQoJCXI9cnIuZnJvbnQoKTsKCQljPWNjLmZyb250KCk7CgkJCgkJbG9uZyBsb25nIHR5cGU9dHlwZV9vZl9udW0oYXJyW3JdW2NdKTsKCQkKCQlhcnJbcl1bY109LTE7CQkvL1ByZXNlbnQgZ3JpZCB2aXNpdGVkCgkJcnIucG9wX2Zyb250KCk7CgkJY2MucG9wX2Zyb250KCk7CgkJaWYocj4wICYmIGFycltyLTFdW2NdIT0tMSAmJiB0eXBlX29mX251bShhcnJbci0xXVtjXSk9PXR5cGUpCgkJewoJCQlyci5wdXNoX2JhY2soci0xKTsKCQkJY2MucHVzaF9iYWNrKGMpOwoJCQkKCQl9CgkJaWYoYz4wICYmIGFycltyXVtjLTFdIT0tMSAmJiB0eXBlX29mX251bShhcnJbcl1bYy0xXSk9PXR5cGUpCgkJewoJCQlyci5wdXNoX2JhY2socik7CgkJCWNjLnB1c2hfYmFjayhjLTEpOwoJCQkKCQl9CgkJaWYocjxyb3ctMSAmJiBhcnJbcisxXVtjXSE9LTEgJiYgdHlwZV9vZl9udW0oYXJyW3IrMV1bY10pPT10eXBlKQoJCXsKCQkJcnIucHVzaF9iYWNrKHIrMSk7CgkJCWNjLnB1c2hfYmFjayhjKTsKCQkJCgkJfQoJCWlmKGM8cm93LTEgJiYgYXJyW3JdW2MrMV0hPS0xICYmIHR5cGVfb2ZfbnVtKGFycltyXVtjKzFdKT09dHlwZSkKCQl7CgkJCXJyLnB1c2hfYmFjayhyKTsKCQkJY2MucHVzaF9iYWNrKGMrMSk7CgkJCQoJCX0KCX0KfQppbnQgbWFpbigpCnsKCWxvbmcgbG9uZyB0ZXN0OwoJbG9uZyBsb25nIHJlc3VsdDsKCXNpZXZlKCk7CglmaW5kX2Nvc3QoKTsKCXNjYW5mKCIlbGxkIiwmdGVzdCk7Cgl3aGlsZSh0ZXN0LS0pCgl7CgkJcmVzdWx0PTA7CgkJc2NhbmYoIiVsbGQiLCZyb3cpOwoJCWZvcihsb25nIGxvbmcgaT0wO2k8cm93O2krKykKCQkJZm9yKGxvbmcgbG9uZyBqPTA7ajxyb3c7aisrKQoJCQkJc2NhbmYoIiVsbGQiLCZhcnJbaV1bal0pOwoJCWZvcihsb25nIGxvbmcgaT0wO2k8cm93O2krKykKCQl7CgkJCS8vcHJpbnRmKCJcbiIpOwoJCQlmb3IobG9uZyBsb25nIGo9MDtqPHJvdztqKyspCgkJCXsKCQkJCS8vcHJpbnRmKCIlOGxsZCAgIixjb3N0W2FycltpXVtqXV0pOwoJCQkJaWYoYXJyW2ldW2pdIT0tMSkJCS8vLTEgaW5kaWNhdGVzIGFscmVhZHkgdmlzaXRlZAoJCQkJewoJCQkJCQoJCQkJCXJlc3VsdCs9Y29zdFthcnJbaV1bal1dOwoJCQkJCWlmKHR5cGVfb2ZfbnVtKGFycltpXVtqXSkhPTEpCS8vaS5lLiBub3QgcHJpbWUKCQkJCQkJYmZzKGksaik7CgkJCQkJZWxzZQoJCQkJCQlhcnJbaV1bal09LTE7CgkJCQl9CgkJCX0KCQl9CgkJcHJpbnRmKCIlbGxkXG4iLHJlc3VsdCk7Cgl9CglyZXR1cm4gMDsKfQ==