Java 质数查找器

Java 质数查找器,java,math,logic,primes,Java,Math,Logic,Primes,因此,我尝试使用acm.utils包中的RandomGenerator类创建一个方法,查找用户输入的从0到9的随机素数,但由于某些原因,它不起作用!我想了很多次,我认为这个解决方案是正确的,但最终给出的数字并没有错 这是针对uni的一个项目,我必须只使用acm.util!没有扫描仪!只有这种代码 public int nextPrime(int n){ int num = rgen.nextInt(1, n); boolean prime=false; if (nu

因此,我尝试使用acm.utils包中的RandomGenerator类创建一个方法,查找用户输入的从0到9的随机素数,但由于某些原因,它不起作用!我想了很多次,我认为这个解决方案是正确的,但最终给出的数字并没有错

这是针对uni的一个项目,我必须只使用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)){

你的代码很奇怪。像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);
    }

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


有一种简单的方法可以在[11000000]范围内的素数内均匀地生成素数。在范围内选择一个随机整数,并测试它是否为素数。如果是,请退回。如果没有,请重复。这称为拒绝采样。由于在大范围内计数或列出素数并不容易,因此在没有拒绝抽样的情况下获得一致随机素数是相当复杂的。测试一个数字是否为素数相对容易,对于n>1,在[1,n]中查找素数平均只需要对数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;

小点的可能重复:1不是素数。我相信您可能想检查num==2{return num;}。这将是不必要的,尽管是因为在办理登机手续时。或者!素数,因为素数是布尔值。
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;