每日一记--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 }
时间: 2024-12-20 16:14:27

每日一记--2014.9.14的相关文章

每日一记--2014.9.22

说好的每日一记呢, 哎,上周接到了老师的任务,要把项目中的后台数据处理代码读懂,于是就没有时间每天搞段小代码来写写了. 但是通过这一周,自己也学到了不少东西. 1. 首先是如何读别人写的代码: 先看 improt 大概用到什么类: 然后看main,有什么变量的初始化(有的写在一个init函数里了): 找到核心类,核心函数(调用了其他函数的函数),看其实现主要功能流程 . 最后再看其他那些被调用的函数,它们的具体实现细节. 2. 其次是如何给别人讲代码,做code review: 先讲其实现的功能

每日一记--2014.9.15

今天的程序还有待改进,写的可能比较冗长了,虽然逻辑不难,自己也是debug了一会儿. 问题是:找数值中的主元素,即个数超过半数的元素. 首先找出唯一的一个候选元素,然后再遍历数值统计其个数,看是否大于数组长度的二分之一,如大于则返回此主元素,若小于则表明没有主元素那么返回-1(假设数组中的数均为正整数). 如何寻找唯一的候选元素: 1.利用递归 2.为找出A中的候选元,先构造B.逐次比较A中的两个元素:比较A1和A2,若相等,则放入B:否则什么也不做.然后比较A3和A4,若相等,则放入B:否则什

每日一记--2014.9.13

今天贴三个小程序,程序很小,但是希望这些小东西都能记在心里 1.求多项式 1 package 多项式; 2 3 public class Polynomial { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 int[] xishu = new int[]{2,1,0,8,4}; 8 System.out.println(poly(xishu,3)); 9 10 } 11 p

每日一记--2014.9.12

今天是整数随机置换 还有记住:java中的基本数据类型是传递值的而不是传递引用的 1 package 随机置换; 2 import java.util.*; 3 4 //生成前N个整数的随机置换 5 //先顺序填满整个数组,然后挨个和前面的随机任取的位置交换 6 7 public class RandomExchange { 8 9 public static void main(String[] args) { 10 // TODO Auto-generated method stub 11

每日一记--2014.10.11(2)

今天终于进展到了第三章,好好读了读链表 其实对于linkedlist来说,它的remove也会是O(N),因为对于删除这个动作确实是常数时间的,但是对于定位到被删除元素的位置就需要有线性时间的开销了 今天参照书上的把ArrayList类编了编,定名为MyArrayListM 1 package myarraylist; 2 3 import java.util.Iterator; 4 import java.util.NoSuchElementException; 5 6 public clas

每日一记:邮件服务器:Postfix

邮件服务器:Postfixmail server与DNS的关系:1.架设mail server 必须要有合法的主机名2.DNS的反解也很重要要架设一部mail server,务必向上层ISP申请IP反解的对应,不要使用预设的反解主机名,否则会是你的邮件服务器发出的信件被视为垃圾信件不申请IP的反解,则可利用relayhost或者是smarthost来处理邮件传递的问题,也涉及到上层ISP的问题3.需要DNS的MX及A标准:先传送给带MAX标志的邮件主机,如果没有再传给带A标志的主机:MAX标志的

每日一记:搭建Memcached + php 缓存系统

服务器环境,Centos6.5 1.安装Memcached服务端 Yum -y install memcached 2.配置Memcached服务端用户以及自动启动服务等 将服务配置成自启动 chkconfig --level 2345 memcached on 3.配置配置文件 vi /etc/sysconfig/memcached PORT=”11211″ 端口  USER=”root” 使用的用户名  MAXCONN=”1024″ 同时最大连接数 CACHESIZE=”64″ 使用的内存大

2014.5.14

这两天都是对知识的梳理,确实发现有些知识遗忘了,同时回过头发现有些知识有了新的了解,有时有恍然大悟的感觉啊.不过自己有时候有了思路,写起代码来还是比较困难的.痛苦并快乐着,多了一个感受,一天不在项目上做点什么,就有点难受的感觉,哈哈!记住,不要害怕报错,一报错就慌了. 今天学习了大绝招就是:断点调试,但是它不会改变程序的执行顺序,方便我们的改错,是锻炼的机会啊!然后就是正则表达. 字符串一旦被初始化,就不可以被改变,存放在方法区中的常量池中. String s1 = "abc"; //

寻找大学目标及行动步骤——记ITAEM团队第二期宣讲会(2014.05.14)

·昨晚8:00-9:40,在 钟海楼03029 ,进行了ITAEM团队第二期宣讲会(第一期见第一期宣讲会总结),来参加的主要是大一学生,以信院为主,也有法学院.文学院的同学.在宣讲会中,大家都比较积极认真. 第二期宣讲会议程 (1)ITAEM团队骆宏作"有目标,才有奋斗的动力"主题分享,时间约为晚8点-8点40分: (2)丁又专作"Doing,Now(现在就行动)"演讲,时间约为晚8点45分-9点28分: (3)ITAEM团队温辉翔分享自己技术成长经验与推荐书籍,时