如何检测素数

时间:2010-05-27 20:00:27

标签: algorithm

我知道有很多二元操作可以证明某些事情是真的  例如,我们可以显示数字是2的幂或其他什么是有一些理论或特殊的二元方法来显示数字是否为素数?

5 个答案:

答案 0 :(得分:6)

检测数字是否为素数并非易事!

阅读这篇关于PRIMES is in P突破的文章:http://www.ams.org/notices/200305/fea-bornemann.pdf,让您了解问题实际上是多么艰难。

这篇新闻文章可能更容易阅读:http://members.cox.net/mathmistakes/primes.htm

简而言之,如果你找到一个简单的“二元方法”,你就会出名!

答案 1 :(得分:5)

通常你只是check

答案 2 :(得分:1)

有关用于查找素数的Sieve算法的一个很好的示例,您可以查看我们的维基百科页面。

Sieve of Eratosthenes

找到素数的一种更有趣的方法,以及Euler Sieve(在同一页的底部触及)可以加快它的速度。

答案 3 :(得分:0)

2的归属能力与素数之间存在很大差异 如果你看一下我们的数字表示系统: 1243 = 1 * 10 3 + 2 * 10 2 + 4 * 10 1 + 3 * 10 0 <登记/> 很容易确定何时数字可以除以10(最低位数为零)或10为幂(所有最低位数为零,高位为“1”,或所有数字之和等于1)。 二元相同:1243 = 1 * 2 10 + 0 * 2 9 + 0 * 2 8 + 1 * 2 7 + 1 * 2 6 + 0 * 2 5 + 1 * 2 4 + 1 * 2 3 + 0 * 2 2 + 1 * 2 1 + 1 * 2 0
您可以检查数字以检查数字是否可以除以2,或者甚至是2的幂,与基于10的数字表示相同。

现在考虑其他数字表示系统。我猜罗马数字也应该有一些有趣的属性,但你可能对以下内容感兴趣: 1243 = 2 0 * 3 0 * 5 0 * 7 0 * 11 1 * 13 0 * 17 0 * 19 0 * 23 0 * 29 0 * 31 0 * 37 0 * 41 0 * 43 0 * 47 0 * 53 0 * 59 0 * 61 0 * 67 0 * 71 0 * 73 0 * 79 0 * 83 0 * 89 0 * 97 0 * 101 0 * 103 0 * 107 0 * 109 0 * 113 1 = 11 1 * 113 1 = [0,0,0,0,1,0,0,0,0,0 ...] prime基
即数字被编码为素数幂的乘积。 这种系统具有很好的性能,可以比位或小数更容易地进行与素数相关的检查。

P.S。虽然具有加权和的系统可以让您轻松计算总和和差异,但带有动力产品的系统可以简化乘法和除法。

答案 4 :(得分:0)

bool isPrime(int number){

    if(number < 2) return false;
    if(number == 2) return true;
    if(number % 2 == 0) return false;
    for(int i=3; (i*i)<=number; i+=2){
        if(number % i == 0 ) return false;
    }
    return true;

}

的通知。如果你的输入超过10 ^ 9,它会很慢。