【问题标题】:Rabin Miller Algorithm拉宾米勒算法
【发布时间】:2013-07-14 21:23:47
【问题描述】:

我正在尝试理解 Rabin Miller 算法,但我对其中的一部分感到困惑。请帮助理解它。

我的理解: 我们在 2^d*s 中计算 's',然后我们取一个随机整数 'a' 并计算 a^s%p,如果它等于 1,那么 p 是可能的素数。否则,如果对于任何 'r' a^(r*s)%p = -1 那么我们将在下一次平方中得到 1,因此 p 是素数。 在第一次迭代中,如果 x=1;然后我们在 if 语句中检查它,但是在第一次迭代之后 if 语句的意义是什么,我不明白。请帮忙...

令人困惑的部分:

if(mod!=p-1 && temp%2==0){
                return false;
            }

原始米勒实施:

bool Miller(long long p,int iteration){
    if(p<2){
        return false;
    }
    if(p!=2 && p%2==0){
        return false;
    }
    long long s=p-1;
    while(s%2==0){
        s/=2;
    }
    for(int i=0;i<iteration;i++){
        long long a=rand()%(p-1)+1,temp=s;
        long long mod=modulo(a,temp,p);
        while(temp!=p-1 && mod!=1 && mod!=p-1){
            mod=mulmod(mod,mod,p);
            temp *= 2;
        }
        if(mod!=p-1 && temp%2==0){
            return false;
        }
    }
    return true;
}

【问题讨论】:

  • 注意编程语言可能很有用。
  • 要注意编程语言..那是什么?
  • 编写代码的语言。可能是 C、C++、C#、Java 等。
  • 不...与编程语言无关。
  • 我强烈反对这一点。有时,符号的含义会因语言而略有不同。他们也有不同的语法规则。例如,long long s 在您使用的语言中可能是有效的,但我相信它在 C# 和 Java 中是无效的语法。手头的编程语言总是相关,因为它们都有不同的规则、怪癖和陷阱。

标签: algorithm


【解决方案1】:

M-R 见证的定义是a,因此a**s != 1 (modulo p)a**(2**r * s) != -1 (modulo p) 对应所有r。当mod(其值为a**(2**r * s))满足mod == 1 (modulo p)mod == -1 (modulo p) 时,循环退出。

如果mod == 1 (modulo p),则满足作为 M-R 见证的第二个属性,因为到目前为止 a**(2**r * s) 的每个值都与 -1 (mod p) 不一致,并且未来的值都不一致,因为它们是所有1 (mod p)。鉴于第二个属性成立,第一个属性a**s != 1 (modulo p) 成立当且仅当循环体至少执行一次。最初是temp == s,最多是(p - 1)/2,而mod != p - 1是第二个属性。我们有temp % 2 == 0 当且仅当循环体至少执行一次。

【讨论】:

  • 先生。大卫,现在我只有一个疑问。最初,我们使用“long long mod=modulo(a,temp,p);”检查 mod 的值.我假设这里的值 mod!=1 ,然后如果 mod 的值在循环的任何迭代中为 1,则循环终止并且 if 条件为真。为什么我们不处理这个案子……或者这个案子不能发生?我问为什么?
  • @user2379271 这种情况可能会发生,这意味着p 不是素数。 为什么math.SE的问题。
  • 假设情况发生在 5*r,那么 a^((5*r)*s)%p=1。然后每次平方后,mod的值为1,因此最后它满足费马小定理性质,根据该性质,如果p是素数,则a^(p-1)%p==1。
  • @user2379271 如果p 是素数,您将首先点击-1(即p - 1)。
  • 大卫先生,我只是问为什么?有什么相同的逻辑或证据吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2014-11-14
  • 2014-07-28
  • 2011-12-02
  • 2018-11-05
  • 2017-04-24
  • 1970-01-01
相关资源
最近更新 更多