判断一个数是质数最快的方法?为什么?

code-artist 2010-07-18 07:49:22
不明白。为什么,望指教
/**
n>=3 and n is odd.
*/
int isPrime(int n)
{
int k, upperBound=n/2;

for(k=3; k<=upperBound; k+=2)
{
upperBound=n/k;
if(n%k==0)
return 0;
}

return 1;
}
...全文
4715 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
h2952220 2012-11-16
  • 打赏
  • 举报
回复
见到了很多个算法的名字……但是都没见到具体的算法步骤……
andy哥 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 的回复:]

如果要计算合数的个数是必须要判断到根号n,直接到n就错了。像6,除了个2算1个,除了个3也算1个。
[/Quote]

楼主有没有考虑过根号n,人家是上取整呢。。。
小白晒太阳 2012-03-07
  • 打赏
  • 举报
回复
如果要计算合数的个数是必须要判断到根号n,直接到n就错了。像6,除了个2算1个,除了个3也算1个。
michunyingzheCSDN 2011-05-30
  • 打赏
  • 举报
回复
判断一个数是质数最快的方法?
for (k = 3; k <= upperBound; k += 2)
{
upperBound = n / k;
if (n % k == 0) return 0;
}
换成 if(n%k!=0)
这样应该也行吧
zyjpjl 2010-08-09
  • 打赏
  • 举报
回复
AR素数检测是什么?可否详细讲一下。
[Quote=引用 40 楼 njwangchuan 的回复:]
其实这个问题很复杂

AR素性检查,比上面提到的方法都快,都缺点是不能给出其因子,若判断一个数是素数,该方法所能给出的全部信息就是:此数不是素数,仅此而已
[/Quote]

njwangchuan 2010-08-09
  • 打赏
  • 举报
回复
其实这个问题很复杂

AR素性检查,比上面提到的方法都快,都缺点是不能给出其因子,若判断一个数是素数,该方法所能给出的全部信息就是:此数不是素数,仅此而已
绿色夹克衫 2010-08-09
  • 打赏
  • 举报
回复
我也不了解AR检测是什么,不过楼上的回复其实是有些不严谨的,比如不能给出其因子,如果是素数就不存在什么因子,另外这个检测相信也不是一个确定性的检测,大概跟Rabin-Miller类似,复杂度上也不可能低于log(n)。

[Quote=引用 41 楼 zyjpjl 的回复:]
AR素数检测是什么?可否详细讲一下。
[/Quote]
zyjpjl 2010-08-08
  • 打赏
  • 举报
回复
你那是只测试一个数字,注意我指的是这几个数字都要测试……
FancyMouse 2010-08-08
  • 打赏
  • 举报
回复
唔。引用错数字了。刚才那个是测试到17的时候的最小反例。只测试到13的话最小反例是3,474,749,660,383。比maxint32要大多了,比maxint64要小多了。
FancyMouse 2010-08-08
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 zyjpjl 的回复:]
判断素数的最快算法……我也不知道,只知道两种比较快的,
一种是在根号N内的所有素数一一试除

还有一种是概率算法,用费马小定理的逆定理(当然不成立,所以只是概率算法)
满足a^(n-1) mod n=1 的合数是非常少的,听说用取a=2,3,5,7,11,13测试在maxlongint(pascal语言中最大长整形数)只有1个是合数
[/Quote]
341,550,071,728,321最小反例,俺没看到过有什么报告称这是int64范围内唯一一个。由于这个数比起2^64来少了很多因此有理由相信在int64里还有至少几个反例。
xxlovec 2010-08-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 minitoy 的回复:]
呵呵,谭浩强的c语言里好像提到判断到根号n就可以了
[/Quote]

那个方法不好理解 效率还低
绿色夹克衫 2010-08-08
  • 打赏
  • 举报
回复
其实就是米勒罗宾,估计FancyMouse同志给出的这个数,应该是这几个都能测过的(2-17),否则用不着这么大,能通过测试的合数多了。不过具体怎么找到这么大的数的,就不清楚了。估计Int64范围的话,还得多测几个。

[Quote=引用 37 楼 zyjpjl 的回复:]

你那是只测试一个数字,注意我指的是这几个数字都要测试……
[/Quote]
zyjpjl 2010-08-07
  • 打赏
  • 举报
回复
算法可以参见百度百科“费马小定理”,时间复杂度也是很理想的,常数级。
zyjpjl 2010-08-07
  • 打赏
  • 举报
回复
判断素数的最快算法……我也不知道,只知道两种比较快的,
一种是在根号N内的所有素数一一试除

还有一种是概率算法,用费马小定理的逆定理(当然不成立,所以只是概率算法)
满足a^(n-1) mod n=1 的合数是非常少的,听说用取a=2,3,5,7,11,13测试在maxlongint(pascal语言中最大长整形数)只有1个是合数
超级大笨狼 2010-08-06
  • 打赏
  • 举报
回复
判断一个数是质数

最快的办法是:


查质数表!~~


seqingzi 2010-08-03
  • 打赏
  • 举报
回复
貌似偶数都没排除。。
应该是楼主少添加了一个判断if(n&1)
如果是素性检验的话,miler那个只是以很高概率的保证是素数。信安数基没怎么好好看,老师讲解RSA的也没怎么听。
chenkezhi 2010-08-03
  • 打赏
  • 举报
回复
这样计算效率低
wsncz 2010-08-03
  • 打赏
  • 举报
回复
6*N + 1
6*N + 5
特殊 2、3
xunathan 2010-08-02
  • 打赏
  • 举报
回复
楼主给的好像不对,4没有考虑到
加载更多回复(25)

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧