判断素数
package T素数;
import java.util.Scanner;
public class T判断素数 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
int n=sc.nextInt();
System.out.println(isPrime(n)?"YES":"NO");
}
}
private static boolean isPrime(int n) {
if(n<=1)return false;
for (int i = 2; i*i <=n ; i++)if(n%i==0)//只需要判断到根号n就可以了
return false;
return true;
}
}
--------------------------------------------------------------
埃氏素数筛法
import java.util.Arrays;
import java.util.Scanner;
public class T埃氏筛法 {
//用1到sqrt(n)之内的所有素数去筛选,把素数的倍数标记为合数就可以了
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
boolean []isPrime=new boolean[n+1];//访问下标到100,需要数组到101
Arrays.fill(isPrime,true);//全部为TRUE;
isPrime[0]=false;
isPrime[1]=false;
for (int i = 2; i*i <=n ; i++) {
if(isPrime[i]==true){
for (int j = 2;i*j <=n; j++) {//防止越界;
isPrime[i*j]=false;
}
}
}
int count=0;//统计素数的个数
for (int i=2;i<=n;i++){
if(isPrime[i]==true){
System.out.print(i+" ");
count++;
}
}
System.out.println("一共有"+count+"个素数");
}
}
----------------------------------------------------------
欧拉筛法O(n)
import java.util.Scanner;
public class T欧拉筛法 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int [] prime=new int[n];//找到具体素数
boolean []isp=new boolean[n+5];//标记下标对应的整数是否为某个数的倍数,倍数》2
int count=0;
for (int i=2;i<=n;i++){
if(isp[i]==false) prime[count++]=i;//把当前素数放在prime数组第count位置,然后count+1;
for (int j = 0; j <count && i*prime[j]<=n; j++) {
isp[i*prime[j]]=true;//例如12筛掉24
if(i%prime[j]==0)//24被24筛掉,36被18筛掉
break;
}
}
for (int i = 0; i <count ; i++) {
System.out.println(prime[i]);
}
System.out.println("一共有"+count+"个素数");
}
}
标签:count,java,Scanner,--,System,int,素数,isPrime From: https://www.cnblogs.com/0930dong/p/16969322.html