首先:介绍一下素数的概念:素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。最小的质数是2,它也是唯一的偶数质数。
其次:介绍两种方法:①试除法 ②筛选法
第①种方法:试除法
因此我们分析需要设两个变量:一个是除数i,一个是被除数j;接下来需要找到两者变量的关系:其中每一个除数i需要从2一直试除到i-1来判断其中是否存在有可以被除数i整除的整数。
import java.util.Scanner;
public class IsPrime {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int unknowNumber = scan.nextInt();
int count = 0;
int j = 0;
int i = 0;
for(i = 2 ; i < unknowNumber ; i++)
{
for(j = 2 ; j <= Math.sqrt(i) ; j++)
{
if(i % j == 0)
break;
}
if( j > Math.sqrt(i))
System.out.println(i);
}
}
}
第②种方法:筛选法(埃拉托色尼(Eratosthenes)筛法)
方法介绍:筛法(挨拉托色尼筛法)是一种用来求所有小于N的素数的方法。把从2到N的一组从正整数小到大按顺序排列。从中依次删除2的倍数、3的倍数、5的倍数,直到根号N的倍数为止,剩余的即为2~N之间的所有素数
具体流程 :
(1)找到一个素数 (2)筛掉这个素数的倍数 (3)移下标 缺点:一个合数(非素数,1既不是素数也不是合数)会被筛掉两次。
import java.util.Scanner;
public class OtherMethod {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int unknownNumber = scan.nextInt(); //自定义一个范围,最后得出该范围的素数有哪些
boolean[] isPrime = new boolean [unknownNumber + 1];
int i = 0,f = 0,j=0;
for(i = 2 ; i <= unknownNumber ; i++)
{
isPrime[i]=true; //遍历数组(假设从2到unknownNumber都是素数)
}
for(f = 2 ; f <= Math.sqrt(unknownNumber) ; f++)
{
if(isPrime[f] == true) //从2这个素数开始,之后2的倍数给筛选掉
{
for (j = f * f ; j <= unknownNumber; j += f)
isPrime[j] = false; //将素数f的倍数j(f的倍数j就是非素数)给筛选出来
}
}
for(i = 2 ; i <= unknownNumber ; i++ )
{
if(isPrime[i] == true)
System.out.println(i); //最后循环判断该数组里面的素数然后将其输出
}
}
}