public class Prime {
public static void main(String args[]){
int x;
for(x=2; x < 100; x++){
if((x % 2)> 0){
System.out.println(x);
}
}
}
}
我用复合数字得到3,5,7,9,11等 只有素数
而不是3,5,7,11等我可能无法掌握编码的想法。
答案 0 :(得分:3)
答案 1 :(得分:2)
if((x % 2)> 0)
不是检查素数的条件。它会在除法后给出余数,这里告诉它是奇数还是偶数。只是奇数不是素数的条件,因为它也可能有其他奇数因素,例如。 21 = 7 * 3。
这是一个简单的java代码,用于获取0到100之间的所有素数。注释中提到的解释
class Main {
public static void main(String[] args) {
for (int n = 2; n <= 100; n++) { // loop for all numbers
boolean flag = true; // to check if factors other than 1, n
for (int f = 2; f <= Math.sqrt(n); f++) {
if (n % f == 0) { // factor found, hence not prime
flag = false; // activate flag
break; // break
}
}
if (flag) { // if flag is not re set
System.out.print(n + ", "); // print n
}
}
}
}
输出:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
如果您也在寻找效率,请执行Sieve of Eratosthenes
class Main {
public static void main(String[] args) {
int N = 100;
// Array to keep record of primes and non primes,
// 0 - prime, 1 - composite
int[] arr = new int[N + 1];
arr[0] = arr[1] = 1;
// loop from 2 to square root of N
for (int i = 2; i <= Math.sqrt(N); i++) {
// check if currently prime
if (arr[i] == 0) {
// add all factors of i to composite numbers upto N
for (int j = i * i; j <= N; j += i) {
arr[j] = 1;
}
}
}
// Print all positions for which fields are not reset
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 0) {
System.out.print(i + ", ");
}
}
}
}
输出:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
答案 2 :(得分:0)
如果你只是想要完成工作&#34;不必考虑它背后的逻辑,有一个很好的&#34; hack&#34;在java中,您可以使用正则表达式检查数字是否为素数:
(对不起,但是我不记得我发现了哪个Thread,当我在java中研究主要计算时)
//################################################################# isPrimeRegEx #
public boolean isPrime(int n) {
return !new String(new char[n]).matches(".?|(..+?)\\1+");
}
如果你想学习真正的素数计算和效率背后的逻辑,我深深建议你从这个线程开始:
在您的情况下,您可以替换
if((x % 2)> 0)
,正如大多数人正确指出的那样,只是做一个模数(%2表示&#34;剩余的除法通过2&#34;)并查看该余数是否大于0(意味着表达式将为真如果x是奇数),用
if(isPrime(x))