以下四种方式,前三种方式是判断输入数n是否为素数,第四种为找寻区间内[2,100]的素数。
package java_course;
import java.util.Scanner;
public class prime {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int n = in.nextInt();
boolean isPrime = true;
//1.测试从2到n-1是否可以整除,计算次数约为n
if(n<=1) isPrime = false;
for(int i=2;i<n;i++)
{
if(n%i==0)
{
isPrime=false;
break;
}
}
运行结果
7
7是素数
10
10不是素数
//2.去掉偶数,从3到n-1,每次加2,计算次数约为n/2
if(n<=1 || n%2==0 && n!=2) isPrime = false;
for(int i=3;i<n;i+=2)
{
if(n%i==0)
{
isPrime=false;
break;
}
}
//3.去掉偶数,从3到n-1,每次加2,计算次数约为n^1/2
if(n<=1 || n%2==0 && n!=2) isPrime = false;
for(int i=3;i<Math.sqrt(n);i+=2)
{
if(n%i==0)
{
isPrime=false;
break;
}
}
if (isPrime) System.out.println(n+"是素数");
else System.out.println(n+"不是素数");
//4.判断能否被已知素数整除
int[] primes = new int[50];
primes[0]=2;
int cnt=1;
MAIN_LOOP:
for (int i=3;cnt<primes.length;i++)
{
for(int j=0;j<cnt;j++)
{
if(i%primes[j]==0) continue MAIN_LOOP;
}
primes[cnt++]=i;
}
for(int k:primes) System.out.print(k+" ");
System.out.println();
运行结果:
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 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229
//5.构造素数表
boolean[] arrayPrime = new boolean[100];
for(int i=2;i<arrayPrime.length;i++) arrayPrime[i]=true;
for(int i=2;i<arrayPrime.length;i++)
{
if(arrayPrime[i])
{
for(int k=2;i*k<arrayPrime.length;k++) arrayPrime[i*k]=false;
}
}
for(int i=0; i<arrayPrime.length; i++)
{
if(arrayPrime[i]) System.out.print(i+" ");
}
System.out.println();
}
}
运行结果
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