求给定值以内的所有素数

 

首先如果一个数不能被任何小于等于该数平方根的数整除,则其是一个素数,这个很好理解。例如数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;
		 }
	 }
 }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值