首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lehmann素性检验

Lehmann素性检验
EN

Stack Overflow用户
提问于 2014-11-17 07:33:32
回答 2查看 1.5K关注 0票数 2

我正在做雷曼的测试,下面的函数不能给出100%准确的输出。它说所有的p都是质数。我一直在搜索,算法似乎是正确的。请问问题出在哪里?

代码语言:javascript
复制
private static boolean lehmanTest(int p, int tries) {

        boolean isPrime = true;

        int a = randomGenerator();

        int e = (p - 1 )/2;
        int result = (a^e) % p;

        System.out.println ("Result: " + result);

        while (tries!=0)
        {
            if(result % p != 1 && result % p != p - 1)
            {
                a = randomGenerator();
                tries--;
            }
                else
                {
                    isPrime = false;
                }
        }
        return isPrime;

}

修改后的代码

代码语言:javascript
复制
private static boolean lehmanTest(int p, int tries) {

        //boolean isPrime = true;

        //generate random number a
        int a = randomGenerator(p);


        int e = (p - 1 )/2;
        int result = ((int)Math.pow(a,e)) % p;


        while (tries!=0)
        {
            result = ((int)Math.pow(a,e)) % p;


            if(result % p != p - 1)
            //if(result % p != 1 && result % p != p - 1)
            {
                a = randomGenerator(p);             
                tries--;
            }
                else
                {
                    return false;
                }
        }
        return true;

    }
private static int randomGenerator (int p) {        
        //generate random numbers a, n times        
        Random rand = new Random();

        int randomInt = rand.nextInt(p);
        return randomInt;       
    }
EN

回答 2

Stack Overflow用户

发布于 2014-11-17 07:42:07

你的第一个问题就是下面这行:

代码语言:javascript
复制
    int result = (a^e) % p;

a^e是"a xor e“,而不是"a to the eth power”。您需要Math.pow(a,e)或类似的东西。您可能应该重新阅读算法的描述。

票数 4
EN

Stack Overflow用户

发布于 2014-11-17 07:48:56

在你的算法中有三件事需要修正:

  1. int result = (a^e) % p;更改为:int result = ((int)Math.pow(a,e))% p;
  2. 以随机选择的一组数字的形式计算现在的数字(目前您只为一个随机生成的数字计算它,无论此条件是否正确:return false.

确保randomGenerator()返回小于p.

  • Change randomGenerator()isPrime=false

我还没有检查实现这些点的代码,我认为我在第3点中描述的代码可能存在问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26963376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档