质数
因数只有1和它本身的自然数就叫质数,也叫素数
如何判断质数
从2开始到N-1位置,都不能被N整除,这个数就是质数。
优化因数的判断范围
如果一个数是N的因数,那么用N除以这个数的商,也是N的因数。首先我们考虑判断到N/2,一个非质数的两个因数必然都小于等于N/2,那么两个因数之间必然存在一个界限,这个界限就是根号N。
例如:18的因数有:2,3,6,9;其中2和9是一对,3和6是一对,这就说明只要能判断18的因数中有2和3,就能判断N是个非质数。根号18约等于4.24,2和3都在根号18的范围内,所以在判断一个自然数是否是质数时,判断到根号下N就可以了。
程序
//输出100以内的质数
class PrimeNumber
{
public static void main(String[] args)
{
boolean isFlag = true;
//System.currentTimeMillis():是long型的,从1970-01-01 00:00:00到目前为止的毫秒数
//long start = System.currentTimeMillis();
for (int i = 2;i <= 100;i++ )//遍历100以内的自然数
{
//for (int j = 2;j <= i - 1;j++)//没有优化
//优化二:对本身是指数的自然数有效
for(int j = 2;j <= Math.sqrt(j);j++)//
{
if (i % j == 0)
{
isFlag = false;
break;//优化一:对本身是非质数的自然数有效
}
}
if (isFlag == true)
{
System.out.println(i);
}
isFlag = true;
}
//long end = System.currentTimeMillis();
//long useTime = end - start;//计算程序执行所花费的时间
}
}
说明:
- 没有优化是指:遍历100以内的自然数(i)后,再让i除以2~(i-1)范围内的每个数(j)取模来判断,是否是质数。
- 优化一:在判断非质数时,加上关键字break,在最小的因数(j)出现后(就表示当前自然数i不是质数),果断跳出循环,判断下一个自然数i。
- 优化二:就是上述的优化因数的判断范围