public boolean isPrime(int n) { for (int i = 2; i * i <= n; i++ ) { if (n % i == 0){ return false;// Write your solution here } } return true; } 这个是正确写法。我想知道为什么是i*i<=n?
时间: 2023-06-18 15:02:08 浏览: 78
这是因为如果一个数n不是质数,那么它一定可以分解为两个因数a和b,其中a和b不会都大于n的平方根。举个例子,假设n不是质数,那么它可以表示为n=a*b,其中a和b都是大于1的整数。如果a和b都大于n的平方根,那么a*b>n*n,显然不可能等于n,因此至少有一个因子小于或等于n的平方根。因此在判断n是否为质数时,只需要判断2到n的平方根之间的数是否能够整除n即可,这就是为什么循环条件为i*i <= n。
相关问题
public class Prime { public static void main(String[] args) { Scanner in = new Scanner(System.in); int x = in.nextInt(); System.out.println(isPrime(x)); } public boolean isPrime(int n) { for (int i = 2; i <= Math.sqrt(n); i++ ) { if (n % i == 0){ return false;// Write your solution here } } return true; } }为什么这段代码会报错
这段代码会报错是因为`isPrime`方法是静态方法,而静态方法无法调用非静态方法。解决方法有两种:
1. 将`isPrime`方法也设置为静态方法:
```
public static boolean isPrime(int n) {
for (int i = 2; i <= Math.sqrt(n); i++ ) {
if (n % i == 0){
return false;
}
}
return true;
}
```
2. 创建一个`Prime`类的对象,然后调用`isPrime`方法:
```
public class Prime {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x = in.nextInt();
Prime prime = new Prime();
System.out.println(prime.isPrime(x));
}
public boolean isPrime(int n) {
for (int i = 2; i <= Math.sqrt(n); i++ ) {
if (n % i == 0){
return false;
}
}
return true;
}
}
```
public classNumberPrinter { public static void printPrimeNumbers(int start, int end, PrimeFinder primeFinder) { int count = 0; for (int i = start; i <= end; i++) { if (primeFinder.isPrime(i)) { System.out.print(i + " "); count++; if (count == 10) { System.out.println(); count = 0; } } } } public static void main(String[] args) { PrimeFinder isPrime = n -> { if (n <= 1) { return false; } for (int i = 2; i <= Math.sqrt(n); i++) { if (n % i == 0) { return false; } } return true; }; printPrimeNumbers(2, 10000, isPrime); } }用Java修改
这段Java代码使用Lambda表达式实现了一个简单的质数打印程序,可以打印出2到10000之间的所有质数。如果您有任何问题或要求,请告诉我。
```
public class NumberPrinter {
public static void printPrimeNumbers(int start, int end, PrimeFinder primeFinder) {
int count = 0;
for (int i = start; i <= end; i++) {
if (primeFinder.isPrime(i)) {
System.out.print(i + " ");
count++;
if (count == 10) {
System.out.println();
count = 0;
}
}
}
}
public static void main(String[] args) {
PrimeFinder isPrime = n -> {
if (n <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
};
printPrimeNumbers(2, 10000, isPrime);
}
}
interface PrimeFinder {
boolean isPrime(int n);
}
```