引入:

最近网上看了一组JAVA面试算法题,我就尝试都做了下,每个都给出相应的JAVA实现,方便自己复习下差不多遗忘的算法。现在比较好的公司面试几乎都会面算法吧。


题目:

列出A到B区间(A<=X<=B)中所有的素数,并且打印出来


代码:

很简单,主要就是判断一个数是否为素数,方法是如果是1,那么不是素数,如果大于1,那么从2一直到它平方根,依次让该数对这些数取模,如果为0(表示整除了) ,那么就不是素数,否则是素数。

package com.charles.algo;
/**
 *
 * 题目:列出A到B区间(A<=X<=B)中所有的素数,并且打印出来
 * @author charles.wang
 *
 */
public class ListPrime {
                      
    private ListPrime(){}
                      
    /**
     * 打印素数
     * @param zoneMin
     * @param zoneMax
     */
    public static void printPrimes( int zoneMin,int zoneMax){
        for(int i=zoneMin;i<=zoneMax;i++){
            if(isPrime(i)){
                    System.out.print(i+" ");
            }
        }
    }
                      
                      
    /**
     * 判断一个数是否是素数,判断的方法是用2,3,4..一直到 sqrt(number)的值去作为除数,
     * 让number去除这些值,如果能整除,说明这个数不是素数
     * @param number
     * @return
     */
    private static boolean isPrime(int number){
                          
        //1不是素数
        if(number==1)
            return false;
                          
        //判断一个数是否是素数,判断的方法是用2,3,4..一直到 sqrt(number)的值去作为除数,
        //让number去除这些值,如果能整除,说明这个数不是素数
        for( int i=2;i<=Math.sqrt(number);i++){
            if (number%i ==0){
                return false;
            }
        }
                          
        return true;
                          
    }
                      
    public static void main(String [] args){
                          
        int zoneMin =2;
        int zoneMax=301;
                          
        System.out.println("打印区间["+zoneMin+","+zoneMax+"]内所有的素数:");
        printPrimes(zoneMin, zoneMax);
    }
}