Java 质数查找器
因此,我尝试使用acm.utils包中的RandomGenerator类创建一个方法,查找用户输入的从0到9的随机素数,但由于某些原因,它不起作用!我想了很多次,我认为这个解决方案是正确的,但最终给出的数字并没有错 这是针对uni的一个项目,我必须只使用acm.util!没有扫描仪!只有这种代码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
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;