我的Java开发学习之旅------>求N内所有的素数
public void zhishu(int num) {
int i, j, k;
for (i = 2; i < num; i++) {
k = (int) Math.sqrt(i);
for (j = 2; j <= k; j++) {
if(i%j==0){
break;
}
}
if (j>k) {
System.out.println("素数: "+i);
}
}
}
算法2.埃拉托斯特尼素数筛选法

的所有素数的倍数剔除,剩下的就是素数。
- 列出2以后的所有序列:
- 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
- 标出序列中的第一个素数,也就是2,序列变成:
- 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
- 将剩下序列中,划掉2的倍数,序列变成:
- 2 3 5 7 9 11 13 15 17 19 21 23 25
- 如果现在这个序列中最大数小于最后一个标出的素数的平方,那么剩下的序列中所有的数都是素数,否则回到第二步。
- 本例中,因为25大于2的平方,我们返回第二步:
- 剩下的序列中第一个素数是3,将主序列中3的倍数划掉,主序列变成:
- 2 3 5 7 11 13 17 19 23 25
- 我们得到的素数有:2,3
- 25仍然大于3的平方,所以我们还要返回第二步:
- 现在序列中第一个素数是5,同样将序列中5的倍数划掉,主序列成了:
- 2 3 5 7 11 13 17 19 23
- 我们得到的素数有:2,3,5 。
- 因为23小于5的平方,跳出循环.
public static void getPrimes(int n) {
if (n < 2 || n > 9999999) // 之所以限制最大值为9999999万,是因为JVM内存限制,当然有其他灵活方案可以绕过(比如位图法)
throw new IllegalArgumentException("输入参数n错误!");
int[] array = new int[n]; // 假设初始所有数都是素数,且某个数是素数,则其值为0;比如第一个数为素数那么array[0]为0
array[0] = 1; // 0不是素数
array[1] = 1; // 1不是素数
// 下面是筛选核心过程
for (int i = 2; i < Math.sqrt(n); i++) { // 从最小素数2开始
if (array[i] == 0) {
for (int j = i * i; j < n; j += i) {
array[j] = 1; // 标识该位置为非素数
}
}
}
// 打印n以内的所有素数,每排10个输出
System.out.println(n + "以内的素数如下: ");
int count = 0; // 当前已经输出的素数个数
int rowLength = 10; // 每行输出的素数个数
for (int i = 0; i < array.length; i++) {
if (array[i] == 0) {
if (count % rowLength == 0 && count != 0) {
System.out.println();
}
count++;
System.out.print(i + "\t");
}
}
}
用以上两个算法求9999999的所有素数
==================================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
==================================================================================================
我的Java开发学习之旅------>求N内所有的素数的更多相关文章
- 我的Java开发学习之旅------>求字符串中出现次数最多的字符串以及出现的次数
金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数 ...
- 我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法
本文参考: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html http://www.blogjava.net/ ...
- 我的Java开发学习之旅------>工具类:将播放器的进度值转换成相应的时间格式
在我的博客<我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法,地址:http://blog.csdn.net/ouyang_pen ...
- 我的Java开发学习之旅------>工具类:Java获取字符串和文件进行MD5值
ps:这几天本人用百度云盘秒传了几部大片到云盘上,几个G的文件瞬秒竟然显示"上传成功"!这真让我目瞪口呆,要是这样的话,那得多快的网速,这绝对是不可能的,也许这仅是个假象.百度了一 ...
- 我的Java开发学习之旅------>二进制、八进制、十进制、十六进制之间转换
一. 十进制与二进制之间的转换 (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权 ...
- 我的Java开发学习之旅------>工具类:Java使用正则表达式分离出字符串中的中文和英文
今天看到一个工具类使用正则表达式将一大段字符串中的中文和英文都分离出来了,在此记录一下,读者可以收藏! import java.util.ArrayList; import java.util.Col ...
- 我的Java开发学习之旅------>Base64的编码思想以及Java实现
Base64是一种用64个字符来表示随意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,由于二进制文件包括非常多无法显示和打印的字符.所以,假设要让记事本这种 ...
- 我的Java开发学习之旅------>Java利用Comparator接口对多个排序条件进行处理
一需求 二实现Comparator接口 三验证排序结果 验证第一条件首先按级别排序级别最高的排在前面 验证第二条如果级别相等那么按工资排序工资高的排在前面 验证第三条如果工资相当则按入职年数排序入职时 ...
- 我的Java开发学习之旅------>Base64的编码思想以及Java实现
Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的 ...
随机推荐
- HNOI 2006 BZOJ 1195 最短母串
题面 问题描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. 输入 第一行是一个正整数n(n<=12),表示给定的字 ...
- mysql之count,max,min,sum,avg,celing,floor
写在前面 昨天去青龙峡玩了一天,累的跟狗似的.不过还好,最终也算登到山顶了,也算来北京后征服的第三座山了.这里也唠叨一句,做开发这行,没事还是多运动运动,对自己还是很有好处的,废话少说,还是折腾折腾s ...
- linux代理设置
http_proxy:http协议使用代理服务器地址:https_proxy:https协议使用安全代理地址:ftp_proxy:ftp协议使用代理服务器地址:user:代理使用的用户名:passwo ...
- 一入python深似海--range()、list与for
range使用方法 使用python的人都知道range()函数非常方便,今天再用到他的时候发现了非常多曾经看到过可是忘记的细节. 这里记录一下: range(1,5)#代表从1到5(不包括5) [1 ...
- (原创)linux安装xgboost快速高效方法
1.先安装git ubuntu: apt-get install git centos: yum install git 2.下载xgboost仓库,注意有--recursive(有子模块哦 ...
- Mogodb集群搭建
1.上传解压软件包 cd /home/dinpay/ 解压:tar -zxvf mongodb-linux-x86_64-rhel62-3.2.2.tgz 重命名: mv mongodb-lin ...
- 2017.2.22 activiti实战--第六章--任务表单
学习资料:<Activiti实战> 第六章 任务表单 本章将一步步完成一个协同办公系统(OA)的请假流程的设计,讲解如何将Activiti和实际业务联系起来. 首先讲解动态表单与外置表单的 ...
- angular - 如何支持less和sass(scss)
更新时间: (2018-7-26) - 使用angular6.x最新版本 新建项目时,我们指定类型: 示例:ng new projectname -style=sass(scss) 实例:ng new ...
- haproxy mod tcp配置 按hostname 来定向服务器
需求 tcp 链接服务器, 服务器端根据不同的域名 定向到不同的内网服务器上: 参考资料 https://serverfault.com/questions/643131/proxying-tcp-b ...
- Android 百度地图开发(二)
这一篇文章主要解说的是百度地图的定位功能,然后还有MyLocationOverlay和PopupOverlay两个地图覆盖物的使用.Overlay是"图层"或"覆盖物&q ...