我的代码仅适用于少数几个数字,但在大多数数字中它完全失败,我无法弄清楚原因。它的意思是返回数字,如果是素数则返回true,如果不是素数则返回false。
int first = 6;
int second = 7;
boolean primeFirst = false;
boolean primeSecond = false;
//first prime checker
for (int x = 2; x< (Math.sqrt(first)); x++)
{
primeFirst = true; //prime
if (first% x == 0)
{
primeFirst = false; //not prime
}
}
//second prime checker
for (int x = 2; x< (Math.sqrt(second)); x++)
{
primeSecond = true;
if (second % x == 0)
{
primeSecond = false;
}
}
System.out.println(first + " is " + primeFirst);
System.out.println(second + " is " + primeSecond);
答案 0 :(得分:2)
首先,在循环的每次迭代中将primeFirst
设置为true。你应该在循环之前只设置,所以在找到一个因子后它不会重置为true。 primeSecond
也是如此。这就是为什么21出现作为素数的原因。
其次,您没有检查每个可能的因素,因为您的循环条件是x< (Math.sqrt(first))
。这意味着循环将在测试平方根之前停止,这就是为什么9出现为素数。
这是一个可能的固定版本:
boolean primeFirst = true;
double sqrtFirst = Math.sqrt(first);
for (int x = 2; x <= sqrtFirst; ++x) {
if (first%x==0) {
primeFirst = false;
break;
}
}
答案 1 :(得分:2)
我认为,这有效(https://www.mkyong.com/java/how-to-determine-a-prime-number-in-java/):
boolean isPrime(int n) {
for(int i = 2; i <= Math.sqrt(n); i++) {
if(n%i==0)
return false;
}
return true;
}
我已尝试过几个不同的数字,一切正常!
答案 2 :(得分:2)
如果您看得正确,primeFirst
&amp; primeSecond
仅依赖于循环的最后一次迭代。这可能适用于素数,但对于许多非素数肯定会失败。
您的代码的另一个问题是x<(Math.sqrt(second))
。它应该是x<=(Math.sqrt(second))
。
我建议你不要使用这个逻辑,使用Wilson's Theorem。
它表示如果某个p
,(p-1)!+1
可以被p
整除,则该数字为素数。
static int factorial(int n){
if(n==0)
return 1;
else return n*factorial(n-1);
}
public static void main(String args[]) {
int p = 6; //any number you want to test
if((factorial(p-1)+1)%p==0)
System.out.println(p+" is a prime number");
else System.out.println(p+" is not a prime number");
}
答案 3 :(得分:1)
您以错误的方式使用它,必须在=
循环条件中添加for
。
我认为不需要Math.sqrt(first)
,也不需要所有这些布尔值。
看到这个简单的代码:
public static void main(String[] args) {
for (int i = 2; i <= 100; i++) {
System.out.println(i + " is " + isPrime(i));
}
}
public static boolean isPrime(int num) {
for (int i = 2; i < num; i++) {
if (num % i == 0)
return false;
}
return true;
}
答案 4 :(得分:-1)
int first=6;
boolean primefirst=true;
for(int i=2;i<=(Math.sqrt(first));i++)
{
if(first%i==0)
{
primefirst=false;
}
}
String output=primefirst==true? "this is prime Number":"this is Not prime Number";
System.out.println(first+" "+output);