求0-100间的素数
分析如下:
如果一个数 m ,能够被从2到 它加 1 的平方根之间的任何一个数整除了,
那么它就是一个合数,
否则,
不能被任何从2到它加 1 的平方根之间的任何一个数整除,
那么它就是一个素数。
public boolean isZhiShu(int number) {
// 判断是否是质数的方法
if (number == 1) {
return false;
}
for (int i = 2; i < number; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
代码实现起来,并不是很难。
那现在我写个方法来把这小应用封装起来,方法参数传入最大值和最小值,返回一个数组。
public int [] ZhiShu(int min, int max){
int data[] = new int[max];
//中间为实现代码
return data;
}
实现这个方法有几种思路,其中唯一的难点就是数组的大小该如何定义,如果只是像上面的代码所写填最大值,那么100个无疑对系统的巨大开销,实际上输出来的数也只有十分之三。
那有没有有几个就装几个的方法呢?
有,而且不止一种,下面来看代码
1.用List来实现:
public int[] ZhiShu(int min, int max) {
List<Integer> list = new ArrayList<Integer>();
Integer it = null;
for (int i = min; i <= max; i++) {
if (isZhiShu(i)) {
it = new Integer(i);
list.add(it);
}
}
int data[] = new int[list.size()];
int index = 0;
Iterator<Integer> itr = list.iterator();
while (itr.hasNext()) {
Integer ite = (Integer) itr.next();
data[index++] = ite;
}
return data;
}
2.用ByteArrayOutputStream来实现.字节输出流
public byte[] ZhiShu(int min, int max) {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
byte k[] = null;
for (int i = min; i <= max; i++) {
if (isZhiShu(i)) {
bo.write(i);
}
k = bo.toByteArray();
}
return k;
}
3.CharArrayWriter 字符输出流
public char[] ZhiShu(int min, int max) {
CharArrayWriter bo = new CharArrayWriter();
char k[] = null;
for (int i = min; i <= max; i++) {
if (isZhiShu(i)) {
bo.write(i);
}
k = bo.toCharArray();
}
return k;
}
以上三种方法,就满足本题的需求而言,第二种方法的效率和开销来说都是最小的,但这个方法一旦超过127就会出问题。
也许还有其它的方法,但由于本人技术实力有限,故只能想出这么多。如果有还希望读者能补充。
分享到:
相关推荐
java 类和对象封装性,是java基础学习的ppt,有助于java自学·
1.计算1-100之间的所有质数(素数)的和。 代码: 2.程序执行结果: 3.用方法实现:有一个数组,找出其中最大值。不能调用数组的Max方法 代码: 4.程序执行结果: 5.用方法实现:有一个字符串数组,请输出最长的...
求任意区间内的全部素数的算法源代码 简单易懂 只要1分
做ACM时,时不时用到。于是为了简单,就直接封装了两个不同方法构造的素数类。因为比较简单,就没加什么注释。 CPrime类中有个printf忘了去掉,抱歉。
最快的素数筛法, 3秒初始化后在P4上能算出2^31 以内素数个数,之后10ms内算出任意 0-2^31之间素数个数 (为节省99%的存贮时间而不存贮).
第二部分为F2^m域上的模运算的点运算实现,被封装为一个类,方便使用,并附带测试代码。第三部分为F2^m域上的签名与验签算法的实现,其中要用到素数域Fn上的模逆运算,已进行相关注释。 网上素数域的sm2算法已经...
1.数论 素数检验:普通素数判别 线性筛 二次筛法求素数 米勒拉宾素数检验 2.拉格朗日乘子法(求有等式约束条件的极值) 3.裂项(多项式分子分母拆分) 4.扩展欧几里得 (ax+by=c) 5.勾股数 (直角三角形三边长) 6....
这里我们用之前同时用200个线程计算30000000~30000200之间的质数程序为例,我们在不改变整个程序的结构的前提下,限制同时存在的线程数量(4个)来保证计算机资源能够合理分配理用。 mysem就是简易的信号量封装...
SLIC超像素分割原作者只提供C++代码,... %希望划分的超像素数(大概的数目,最终的结果不一定与此相等) m=10; %兼容参数,取值10-40) [klabels,numlabels] = SLICformatlab(J, k, m); %输出:标号矩阵,label数量
使用 Miller-Rabbin 素性检测方法实现的生成大素数的算法 实现了常见的安全算法,比如 AES 和 3DES 加密算法,RSA加密算法以及DSA 数字签名算法,MD5 以及 SHA-3 哈希算法 设计并实现了一种基于密钥封装协议的安全...
本文采用费马小定理测试素数,使用Montgomery加快大数模乘运算,用C++实现RSA加密算法类库,并在32位windows平台封装成组件。在.Net平台引用此组件,实现可以对任意文件进行RSA加密操作的窗体应用程序。经过加密的...
Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数...
Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...
Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...
Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...
Eratosthenes筛选求质数 超长整数运算(大数运算) 长 PI 最大公因数、最小公倍数、因式分解 完美数 阿姆斯壮数 最大访客数 中序式转后序式(前序式) 后序式的运算 关于赌博 洗扑克牌(乱数排列) ...
本文采用费马小定理测试素数,使用Montgomery加快大数模乘运算,用C++实现RSA加密算法类库,并在32位windows平台封装成组件。在.Net平台引用此组件,实现可以对任意文件进行RSA加密操作的窗体应用程序。经过加密的...
本文采用费马小定理测试素数,使用Montgomery加快大数模乘运算,用C++实现RSA加密算法类库,并在64位windows平台封装成组件。在.Net平台引用此组件,实现可以对任意文件进行RSA加密操作的窗体应用程序。经过加密的...
本文采用费马小定理测试素数,使用Montgomery加快大数模乘运算,用C++实现RSA加密算法类库,并在32位windows平台封装成组件。在.Net平台引用此组件,实现可以对任意文件进行RSA加密操作的窗体应用程序。经过加密的...
• Eratosthenes筛选求质数 • 超长整数运算(大数运算) • 长 PI • 最大公因子、最小公倍数、因式分解 • 完美数 • 阿姆斯特朗数 • 最大访客数 • 中序式转后序式(前序式) • 后序式的运算 关于...