判断大数是否是素数问题

来源:互联网 发布:国云数据科技有限公司 编辑:程序博客网 时间:2024/05/16 15:59

判断一个素数的方法首先要从素数的定义来看,一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。来自百度百科。这就可以看出我们要判断是否素数只要for(2<= i < num), if num%2 == 0. return it is a primer number. otherwise it is a composite number.

附上简单code. 

def isPrimer(num):for i in range(2, int(math.sqrt(num)) + 1):if num % i == 0:return Falsereturn True
PS:当然这里没有做关于1和2的判断。


下面我们来讨论对于大数的素数判断问题。何为大数1233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332222222222222222222222222222222如果我们对于上面的数字的math.sqrt()做循环运算,看起来不是一个好主意。这里我们就要祭出今天的一个主要话题,当然这个要回归到数学问题了。费马小定理【对于任意的a<p 如果a^(p-1)=1(mod p)成立,那么我们认为p是一个素数】。可以找一些例子来验证:

2^2 = 1(mod 3) yes. so 3 primer number.

2^3 = 1(mode 4) error. so 4 is composite number

2^4 = 1(mode 5) yes. so 5 is primer number

那么我们似乎只要套用一下这个公式就可以了。no。求一个2^p当p足够大的时候,这里似乎比上面的循环更加可怕。但是有了幂模运算,这个问题有可以得到解决:

(a^b)%c = ((a%c)^b)%c.

这样我们的问题就可以简单的解决了

 another code with c sharp;

 static int GetMod(int a, int b, int n)        {            int ret = 1;            while (0 != b--)            {                ret = a * ret % n;            }            return ret;        }

if 上面的function return 1. so it is a primer. otherwise it is a composite number.


ok, 通过这些我们完成了一个数字的素数判断。 看起来还是很有意思的。嘎嘎、




原创粉丝点击