素数查找器

时间:2015-12-24 18:06:09

标签: java math logic primes

所以我试图使用acm.utils包中的RandomGenerator类创建一个从0到n(从用户输入)的随机素数的方法,由于某种原因它不起作用!我经历了很多次,我觉得这个解决方案是正确的,它最终给出了没有错的数字!

这是针对uni的项目,我只能使用acm.util!没有扫描仪!只有这种代码

  v <- NULL
  ndays <- length(v_day[[5]]$articles_over_time$buckets)

  for (i in 1:ndays) {
  v1 <- do.call("rbind", lapply(v_day[[5]]$articles_over_time$buckets[[i]]$group_by_state$buckets, data.frame))
  th_dt <- as.POSIXct(v_day[[5]]$articles_over_time$buckets[[i]]$key / 1000, origin="1970-01-01")
  v1$view_date <- th_dt
  v <- rbind(v, v1)
  msg <- sprintf("Read views for %s. Found %d \n", th_dt, sum(v1$doc_count))
  cat(msg)
  }
  v

4 个答案:

答案 0 :(得分:1)

=用于分配,==用于比较。 你需要改变你的状况

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

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

答案 1 :(得分:1)

这是确定数字是否为素数的基本方法。这种方法实际上只是为了理解查找数字是否为素数的逻辑。享受。

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;

答案 2 :(得分:0)

您的代码非常奇怪。像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);
    }

答案 3 :(得分:0)

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

有一种简单的方法可以在[1,1000000]范围内的素数内均匀生成素数。选择范围内的随机整数并测试它是否为素数。如果是这样,请将其退回。如果没有,请重复。这称为拒绝抽样。在没有拒绝采样的情况下获得均匀随机素数是非常复杂的,因为在大范围内计算或列出素数并不容易。测试一个数是否是素数是相对容易的,并且对于n> 1,它平均需要大约log n个样本才能在[1,n]中找到素数。