判断一个数是否是质数

来源:互联网 发布:php aes加解密 编辑:程序博客网 时间:2024/04/29 04:40

题目:

          判断请判断429496731是否是质数?

方法:

          要判断N是否是质数只要判断N除以[2,N的平方根]这个区间中的数,若其中有一个数是N的因子,则N就不是质数,否则N为质数。

该方法时间复杂度为0(根号N)。

原理:

         为什么要从(根号N)开始除起呢?这是一个数学问题。我们令w:=(根号N),则可知W^2等于N。易知若N可以除尽[2-----w]中的数,则其商必属于[w,N]这个区间中,也即是若N存在因子,则因子必关于W‘对称’,这样就使时间复杂度降为(根号N)。

代码:

         这个算法很简单,c++代码如下:

//@pre Vnumber.number>=2 ∧ N(number)∧ number< 429496726//@post rv<->Vi.i>1∧i<number->number ≡ 0 (mod i)bool Number::core_isPrime(double number)const{int temp=static_cast<int>(std::sqrt(number));double result_temp;while (temp!=1){result_temp=number/temp;if(result_temp-static_cast<int>(result_temp)==0){return false;}temp--;}return true;}