时间限制: 1Sec 内存限制: 64MB 提交: 25444 解决: 15094
题目描述
用筛法求之N内的素数。
输入
N
输出
0~N的素数
样例输入
100
样例输出
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
思路
我们可以利用布尔类型数组(默认值是false),现将全部的数默认为true,即初始所有的数均为素数。那么接下来我们只需要判断非素数,将非素数的值改为false。最后将布尔值为true的值输出即可。
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
/*n以内所有素数*/
int n = scanner.nextInt();
boolean[] isPrime = new boolean[n];
for ( int i = 2; i < isPrime . length; i++ )
{
isPrime[i] = true;
}
for ( int i = 2; i < isPrime . length; i++ )
{
if ( isPrime[i] )
{
for ( int k = 2; i*k < isPrime. length; k++ )//排除i的倍数
{
isPrime[i*k] = false;
}
}
}
for ( int i = 0; i<isPrime. length; i++ )
{
if ( isPrime[i] )
{
System.out.println(i);
}
}
}
在判断素数时,我们可以使用乘积的形式,减少判断的次数。直接将非素数及它的倍数全部淘汰掉!