用“埃氏筛法”求2~100以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。 要求使用数组及增强的for语句。

import java.util.ArrayList;
import java.util.List;

public class Ch4_1_2 {
    public static void main(String[] args)
    {
        System.out.println("100以内的素数如下:");
        List<Integer> lists = getPrimes(100);
        for(int i = 0;i < lists.size();i++)
        {
            Integer list = lists.get(i);
            System.out.print(list+" ");
            if(i % 10 == 0)
                System.out.println();
        }
    }
    /** * 求n以内的所有素数 * @param n 范围 * @return n以内的素数 */
    private static List<Integer> getPrimes(int n)
    {
        List<Integer> result = new ArrayList() ;
        result.add(2);
        for(int i=3;i<=n;i+=2)
        {
            if(!divisible(i,result))
            {
                result.add(i);
            }
        }
        return result;
    }

    private static boolean divisible(int n, List<Integer> primes) {
        for(Integer prime : primes)
        {
            if(n % prime == 0)
            {
                return true;       //整除,则返回真
            }
            if(prime >= Math.sqrt(n) )   //如果超过平方根还没有整除,则退出循环
                break;
        }
        return false;
    }
}
全部评论

相关推荐

求面试求offer啊啊啊啊:这个在牛客不是老熟人了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务