怎样判断一个数是素数,如何快速判断一个数是素数?

,抽时间速度答题。

如何判断一个数是素数,而且还要求快速,比如给一个数N,判断数N是否是素数,该怎么做呢?

质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。

它的因素只有1和它本身,而在所有实数集合中,这样的素数有无数个。

那么一般的方法可以用下面的这种方法来计算,通过寻找所有的因数,但是这种方法其实当n这个数很大的时候是很慢的。那么有没有更快的方法呢?答案是必须的。

怎样判断一个数是素数,如何快速判断一个数是素数?

费马小定理

费马小定理(Fermat's little theorem)是数论中的一个重要定理,在1636年提出,其内容为: 假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p),即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。

怎样判断一个数是素数,如何快速判断一个数是素数?

有这个费马小定理以后,再回去看看这个判断素数的问题,是否可以用费马小定理来解决呢?先来看一个HOJ的题目,题目链接在这儿:

http://acm.hit.edu.cn/hoj/problem/view?id=1356

题目大意就是,给你一个正整数,需要你编一个程序,去判断这个数是不是素数。

怎样判断一个数是素数,如何快速判断一个数是素数?

既然让你判断是不是素数,如果你用最上面的那个很原始的方法去,必然Time out,这个时候就需要用到费马小定理了,先来看看我N年轻写的代码。

怎样判断一个数是素数,如何快速判断一个数是素数?

下面来讲讲这个答案哈。费马小定理里面讲到,假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p),即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。也就是说我们sample几个素数a,去验证整个p,如果满足了费马小定理,那么这个p是素数的可能性非常非常的大。具体需要sample几个,这个貌似有正面,其实3-4个基本上就满足了,非素数是很容易就被检测出来的。其实这个问题就转换为如何去快速的算次方和模运算了,恰恰有一个理论叫做蒙哥马利幂模运算,具体这个方法可以去网上自己搜一下,也就是对应我们代码里面的mod那个函数。

看懂了的,记得给一个赞,听说点赞的小伙伴都走上了人生巅峰。不懂的评论区见。

JAVA怎么输出素数?

不请自来,希望能帮到你!

1.

首先定义两个int型变量i和j,然后通过两个for循环语句对100以内的素数进行逐个遍历,for循环嵌套使用,j层包括i层和一个if条件语句,用开输出j满足条件时的素数值,具体如图所示。

怎样判断一个数是素数,如何快速判断一个数是素数?

2.

当在i层循环语句中进行条件判断时,如果满足表达式i=2;i<=j/2;则执行i++,且在if语句中将j与i进行取余运算,如果值等于0,那么执行break语句,跳出i层循环,即该数不是素数,执行j++再次进行运算。

怎样判断一个数是素数,如何快速判断一个数是素数?

3.

附源代码:

public class E14{ public static void main(String args[ ]){ int i,j; for(j=2;j<=100;j++){ for(i=2;ij/2){ System.out.println(""+j); } } }}

怎样判断一个数是素数,如何快速判断一个数是素数?
注意事项

for(j=2;j

for(i=2;i

"

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 xxx@163.com 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论