什么是素数了?就是除了0和1之外,一个数只能由1和它本身相乘得来,这就是素数
第一种暴力求解:
package com.fan.suanfati;
import java.util.Scanner;
public class SuShu {
public static void main(String[] args) {
System.out.println("请输入数字,以便求出该数字内的素数");
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int bl = bl(a);
System.out.println(bl);
}
public static int bl(int n){
int count=0;
for (int i =2 ; i<n ; i++) {
count+=isPrime(i)? 1 : 0;
}
return count;
}
//i*i其利用根号,对其进行了优化,但是注意要有等号
public static boolean isPrime(int f){
for (int i = 2; i*i <= f;i++) {
if (f%i==0){
return false;
}
}
return true;
}
}
第二种:
埃氏筛选:
怎么理解了?就是一个数是素数,那么这个数乘以2,3,4一直下去,其都是合数,那么就可以进行排除了,这就是埃氏筛选
代码:
package com.fan.suanfati;
//埃式筛选:就素数乘以2 *3 一直乘都是合数,剩下的就是素数
public class suShu1 {
public static void main(String[] args) {
int i = aiShi(100);
System.out.println(i);
}
public static int aiShi(int n){
boolean[] booleans = new boolean[n]; //默认false表示素数
int count=0;
for (int i = 2; i <n; i++) {
if (!booleans[i]){
count++;
//其一般是j=2*i,但是优化师i*i,因为重复了
for (int j=i*i;j<n; j+=i){
booleans[j]=true;
}
}
}
return count;
}
}