zoukankan      html  css  js  c++  java
  • 每日一记--2014.9.14

    今天的小程序是厄拉多塞筛--寻找小于整数N的所有素数

    厄拉多塞筛的基本思想是:从最小的素数2开始,首先把2圈出,然后将2的倍数去除。找出下一个未被圈出的数3,将3的倍数去除。找出下一个未被圈出的数35,将5的倍数去除,以此类推,直到N的平方根为止,就不需将其倍数去除了。最后剩余的被圈出的数就是要找的素数。

     1 package 判断素数;
     2 
     3 import java.util.ArrayList;
     4 
     5 public class Shai {
     6     public static void main(String[] s){
     7         System.out.println(    findPrime(100));
     8     }
     9     private static ArrayList<Integer> findPrime(int n) {
    10         //1,先为数组中的数赋值
    11         int[] num = new int[n+1];//为了将n个数都存入且不与角标冲突,数组大小为n+1,这样我们只使用从角标为1的数组
    12         for(int i=0;i<=n;i++)
    13             num[i]=i;
    14         //2,依次去除合数,即将合数置零
    15         int end = (int) Math.sqrt(n);
    16         for(int i=2;i<=end;){
    17             for(int j=i*2;j<=n;j+=i){//注意j从i*2开始
    18                 num[j]=0;
    19             }
    20             i=next(num,i);
    21         }
    22         //3,最后再遍历数组,将未被置零的数也就是素数放入list中,返回list
    23         ArrayList<Integer> sushu=new ArrayList<Integer>();
    24         for(int i=2;i<n;i++){
    25             if( num[i]!=0){
    26                 sushu.add(num[i]);
    27             }
    28         }
    29         return sushu;
    30     }
    31     //找出下一个未被置零的数
    32     private static int next(int[] aa,int i) {
    33         while(aa[++i]==0){    
    34         }
    35         return i;
    36     }
    37 }
  • 相关阅读:
    JavaBasics-15-多线程
    4.10 SpringCloud微服务技术栈
    4.3 Linux操作系统_Unix操作系统
    4.2 互联网项目架构演进
    4.1 微服务框架_引言
    4.6 Redis
    SpringBoot
    docker-dockerfile实战构建文件
    docker 安装私有仓库 registry(离线)
    基础K8S搭建(20209.08亲测成功)
  • 原文地址:https://www.cnblogs.com/ivywenyuan/p/3971524.html
Copyright © 2011-2022 走看看