1

我希望有一个程序显示特定范围内的范围,并且仅当该范围内没有素数(如 24 到 28)时才显示一次“无素数”。

int count=0;

for(prime = lowerLimit ;prime < upperLimit; prime++) 
{   
    count=0;                 
    for(divisor = 2; divisor <prime; divisor++)

        {
           if(prime % divisor== 0)                            

                      count++;

    }

if(count==0)
System.out.println(prime);
}

if (count>0)
System.out.println("nope"); 

我试图把

if (count>0)
System.out.println("nope"); 

在循环之外,但是当范围有素数时它也会打印。我该如何解决?

4

4 回答 4

2

保留一个额外的变量,如noOfPrime,它将计算一个范围内的素数的数量。如果找到任何素数,则增加 1,以便在循环之外您可以确定数字素数以及是否存在任何素数。

int count = 0;
int noOfPrime = 0;
...
for(prime = lowerLimit ;prime < upperLimit; prime++){
    ...
    if(count==0){
       System.out.println(prime);
       noOfPrime+=1;
    }
}
if(noOfPrime >0)
    System.out.println("no primes);
于 2013-10-03T05:14:44.730 回答
2

首先,您检测素数的方法很糟糕。它有效,但速度非常慢。如果您想改善内部循环,我建议您考虑使用筛子。

其次,您到底想计算什么?现在,您的 count 变量存储一个数字的除数数量,然后在检查下一个数字时将其设置为零。这将如何告诉你在某个范围内有多少质数?你可以这样做:

notPrime = false;
for(prime = lowerLimit ;prime < upperLimit; prime++) 
{                    
    for(divisor = 2; divisor <prime; divisor++)
    {
        if(prime % divisor== 0){
            notPrime = true;
            break;
    }
    if(notPrime)
        break;
}

if(notPrime) System.out.println("There's a prime");
于 2013-10-03T05:16:53.770 回答
2

您可以设计一个函数来确定一个数字是否是素数,例如:

//checks whether an int is prime or not.

boolean isPrime(int n) {
    //check if n is a multiple of 2
    if (n%2==0) return false;
    //if not, then just check the odds
    for(int i=3;i*i<=n;i+=2) {
        if(n%i==0)
            return false;
    }
    return true;
}

在 for 循环中,您将函数调用到间隔的每个元素:

for(int i=lowerLimit;i<=upperLimit;i++){      
  if (!(isPrime(i))){
     System.out.println("nope");
     break;
  }
}

对不起,如果我有一些语法错误,我是用手机回复的。

于 2013-10-03T05:19:58.767 回答
0

每次你到达外循环的末尾并且count仍然是 0 时,这意味着你找到了一个素数。因此,即使这种情况发生一次,那么您最后也不会打印“nope”。使用boolean变量来跟踪您是否见过素数。由于这是作业,我会让你弄清楚如何使用它。提示:声明boolean以上两个循环。

于 2013-10-03T05:13:02.843 回答