首先如果一个数不能被任何小于等于该数平方根的数整除,则其是一个素数,这个很好理解。例如数m=n*n,则m一定不是素数因为可以被n整除。如果m=k*j.k大于m的平方根。那么j一定小于其平方根。所以可以证明m只要不能被小于平方根的数整,则一定不会被大于平方根的数整除。
第二,如果一个数不能被比他小的所有素数整除,则其是一个素数。因为比这个数小的其他数都应该可以用比他小的素数整除。
另外程序中第六行的i<m。我一直认为一个素数的平方一定大于比他大的下一个素数。但是没有想到好的证明办法。如果可以证明则不需要i<m进行判断。
int* ret;
int m = 0;
bool IsPrime(int n)
{
int i = 0;
while(i < m && (ret[i])*(ret[i]) <= n)
{
if(n % ret[i] == 0)
{
return false;
}
++i;
}
return true;
}
void FindPrime(int n)
{
ret = new int[n];
for(int i = 2; i <= n; ++i)
{
if(IsPrime(i))
{
ret[m] = i ;
++m;
}
}
}