!提高for循环速度

求助!!!提高for循环速度
我的程序由于for循环过多而导致速度很慢,求高手帮忙优化啊!
原代码比较复杂,我已经将其简化如下:
int width = 8000;
int cell[4][4], p[4][8000];//p中各个元素的值或为0或为1
int i, j, r = 2;
for(i=0; i<(4+1)/2; i++)
{
for(j=i; j<(4+1)/2; j++)
{
if ( ((i-r)*(i-r)+(j-r)*(j-r)) < (r+0.5)*(r+0.5) )
{
cell[i][j] = 1;
cell[i][4-1-j] = 1;
cell[j][i] = 1;
cell[j][4-1-i] = 1;
cell[4-1-i][j] = 1;
cell[4-1-i][4-1-j] = 1;
cell[4-1-j][i] = 1;
cell[4-1-j][4-1-i] = 1;
}
}
}
int n = 0;
for(int k = 0; k < 8000; k++)
{
n = 0;
for(i = 0; i < 4; i++)
for(j = 0; j < 4; j++)
{
if(cell[i][j] != 0 && p[i][k] != 0)
n++;
}
//后面还有类似的for循环,且会对cell的值做修改
}
性能优化

------解决方案--------------------
1、用一维数组代替二维数组;
2、(i-r)*(i-r)+(j-r)*(j-r))<(r+0.5)*(r+0.5)这个关于(i,j)的条件可以直接建表,不要每次都去计算。
------解决方案--------------------
貌似可以转化成整型运算,提高点速度。
  if ( ((i-r)*(i-r)+(j-r)*(j-r)) < (r+0.5)*(r+0.5) )

------解决方案--------------------
如果不能改算法,就将能够提前算出的表达式用变量代替,并放到循环外。
------解决方案--------------------
(i-r)*(i-r)+(j-r)*(j-r)) < (r+0.5)*(r+0.5)
------------------------------------
上面好多的童鞋看题不仔细,这不是关键啊,这个才循环几次,不影响的。

下面那个8000次的循环里面再2重循环才是问题所在。

我觉得从优化循环来说,不一定能提升多少的效率。
看起来似乎是大规模的矩阵运算,要从数学这方面入手,改进算法。
------解决方案--------------------
把条件判断中if(cell[i][j] != 0 && p[i][k] != 0)一部分提到前面,可以减少内层循环的次数:

for(int k = 0; k < 8000; k++)
{
n = 0;
for(i = 0; i < 4; i++)
if( p[i][k] != 0)//先判断一下p[i][k],不符合条件就不进行内层循环