质数查找器

Prime numbers finder

所以我正在尝试使用 acm.utils 包中的 RandomGenerator class 找到从 0 到 n(用户输入)的随机素数的方法,出于某种原因它不起作用!我想了很多次,我认为这个解决方案是正确的,但它最终给出的数字没有错!

这是大学的一个项目,我只能使用 acm.util!没有扫描仪!只有这种代码

public int nextPrime(int n){
    int num = rgen.nextInt(1, n);   
    boolean prime=false;
    if (num==1){
        return (num);
    }else{
        int i = 2;
        int c = 0;
        while ((i < num-1)&&(prime=false)){
            if( (num % i) == 0){
                c=c+1;
            }
            if((c==0)&&(i==(num-1))){
                prime=true;
            }
            if(c>=1){
                num = rgen.nextInt(1, n);
                i=1;
            }
        i=i+1;
        }
    }
    return (num);
    }

=用于赋值,==用于比较。 你需要改变你的条件

while ((i < num-1)&&(prime=false)){

 while ((i < num-1)&&(prime==false)){ or
 while ((i < num-1)&&(!prime)){

您的代码相当奇怪。 c之类的变量不是很清楚,名字也帮不上忙

您可以阅读其他实现。

我做了一些更改以使其正常工作。痕迹也有帮助!

public static int nextPrime(int n)
    {
    int num = (int)(1+Math.random()*n);  // other generator

 // TRACE HERE
    System.out.println("START:"+num);

    boolean prime=false;

    // CHANGE HERE
    if (num==2)
        {
        return (num);
        }   
        else
        {
        int i = 2;
        int c = 0;

        // CHANGE HERE
        while ((i < num-1)&&(prime==false))
            {
            // Not prime => next one
            if( (num % i) == 0)
                {
                // TRACE HERE
                System.out.println("YOU LOSE: :"+num+" divided by "+i);

                c=c+1;
                } 

            if((c==0)&&(i==(num-1)))
                {
                prime=true;

                // TRACE HERE
                System.out.println("BINGO:"+num);

                // CHANGE HERE
                break;
                }

            if(c>=1)
                {
                // SAME PLAYER LOOP AGAIN
                num = (int)(1+Math.random()*n);

                // TRACE HERE
                System.out.println("RESTART:"+num);

                i=1;

                // CHANGE HERE
                c=0;
                }
        i=i+1;
        }
    }
    return (num);
    }

要么您错误地陈述了问题,要么您没有接近正确地编码问题。 10 以内的素数有 4 个:{2,3,5,7}。如果用户输入 10,你应该从这个集合中随机给出一个素数,还是随机给出前 10 个素数 {2,3,5,7,11,13,17,19,23,29} 中的一个?您说问题出在第一种解释(其中 11 不是对 10 的有效响应),但您尝试了第二种解释(其中 11 是对 10 的有效响应)。

例如,有一种简单的方法可以在 [1,1000000] 范围内的素数内均匀生成素数。在范围内选择一个随机整数并测试它是否为素数。如果是这样,return它。如果没有,请重复。这称为拒绝抽样。在不进行拒绝抽样的情况下,要得到一个均匀随机的素数是相当复杂的,因为在一个大范围内统计或列出素数并不容易。测试一个数是否为质数相对容易,对于 n>1,平均只需要大约 log n 个样本就可以在 [1,n].

中找到一个质数。

这是判断一个数是否为素数的基本方法。这种方法实际上只是为了理解查找数字是否为素数背后的逻辑。享受。

public boolean isPrime()
{
boolean prime = true;

    for (int s = 2; s < original; s++)
    if (original % s != 0 )
    {
        prime = true;

    }
    else
    {
        prime = false;
        return prime;
    }

    return prime;