关于筛选法求素数的算法我就不介绍了,大家可以点
这里查看相关资料查看相关资料,这里只是贴下粗糙的代码。
package info.lwjlaser.prime;
import java.util.ArrayList;
import java.util.List;
public class Prime {
public static void main(String [] args)
{
int numCount = 100000000;
long start = System.currentTimeMillis();
getAllPrime(numCount);
long end = System.currentTimeMillis();
System.out.println((end-start)/1000.0);
start = System.currentTimeMillis();
getAllPrimeEfficient(numCount);
end = System.currentTimeMillis();
System.out.println((end-start)/1000.0);
}
/**
* 判断给定的数是否是素数
* @param n
* @return
*/
private static boolean isPrime(int n)
{
if(0 >= n)
{
throw new IllegalArgumentException("数字小于0");
}
if(1 == n)
{
return false;
}
if(2 == n)
{
return true;
}
for(int i = 2; i < Math.sqrt(n) + 1; i ++)
{
if(0 == n % i)
{
return false;
}
}
return true;
}
/**
* 返回包含小于给定数的所有素数的链表
* @param n
* @return
*/
private static List<Integer> getAllPrime(int n)
{
List<Integer> primes = new ArrayList<Integer>((int)Math.sqrt(n));
for(int i = 1; i <= n; i++)
{
if(isPrime(i))
{
primes.add(i);
}
}
return primes;
}
/**
* 返回包含小于给定数的所有素数的链表(使用筛选法)
* @param n
* @return
*/
private static List<Integer> getAllPrimeEfficient(int n)
{
List<Integer> primes = new ArrayList<Integer>((int)Math.sqrt(n));
int [] nums = new int[n+1];
for(int i = 0; i <= n; i++)
{
nums[i] = i;
}
nums[0] = 0;
nums[1] = 0;
for(int i = 2; i <= n; i++)
{
if(0 == nums[i])
{
continue;
}
else
{
for(int j = 2;; j++)
{
int index = j * i;
if(index > n)
{
break;
}
nums[index] = 0;
}
}
}
for(int num : nums)
{
if(0 != num)
{
primes.add(num);
}
}
return primes;
}
}
function prime(a)
tic;
if a <= 0 || round(a)~=a || ~isreal(a)||length(a)~=1
disp('请输入正确的数');
return;
end
if 1 == a
disp('没有素数');
return;
end
if 2 == a || 3 == a
disp(a);
return;
end
arraySize=a - 1;
array=zeros(1,arraySize);
for x = 1:arraySize
array(x)=x+1;
end
index = 1;
first = array(index);
while first^2 <= a
% if isPrime(first)
if 0 ~= first
for y = index + 1 :arraySize
if 0 == mod(array(y),first)
array(y)=0;
end
end
end
index = index+1;
first = array(index);
end
total = 0;
for z=1:arraySize
if 0 ~= array(z)
fprintf('%d ',array(z));
total = total+1;
end
end
fprintf('\n');
fprintf('%d以内共有%d个素数\n',a,total);
toc;
分享到:
相关推荐
Eratosthenes筛选法求质数.rar
MATLAB实现不同插值方法的GUI界面设计 源程序代码.rar MATLAB实现偏微分方程的差分计算 源程序代码.rar MATLAB实现单摆在外力矩作用下的动画 源程序代码.rar MATLAB实现图像中值 均值 维纳滤波 源程序代码.rar ...
数组筛选法求素数c++编程
11.MATLAB实现不同插值方法的GUI界面设计 源程序代码 12.MATLAB实现灰度预测模型的源代码 13.MATLAB实现偏微分方程的差分计算 源程序代码 14.MATLAB实现图像去噪 滤波 锐化 边缘检测 15.MATLAB实现线性拟合和相关...
2013全国大学生数学建模B题matlab代码.rar 802.11a OFDM MATLAB仿真代码!(推荐).rar MATLAB DCT水印源程序代码.rar MATLAB GUI 实例.rar matlab GUI实例.rar MATLAB GUI实现动态画图曲线的源程序代码.rar matlab.rar...
Matlab课程老师提出的计算素数比赛,在30秒内看谁能用机房里的电脑计算出最多的素数。兴趣使然,自己结合基本的素数定理和筛选法,成功编写这个小程序。目的无他,贴出以供交流和共同进步。
27个Matlab代码源程序合集: MATLAB DCT水印源程序代码.rar MATLAB GUI实现动态画图曲线的源程序代码.rar MATLAB中的基本语法和语句示例代码.rar MATLAB使用欧拉Euler法求解微分方程组 源程序代码.rar MATLAB光通过三...
筛选法求素数,在大范围内求素数比其他方法高效很多。
2013全国大学生数学建模B题matlab代码.rar 802.11a OFDM MATLAB仿真代码!(推荐).rar MATLAB DCT水印源程序代码.rar MATLAB GUI 实例.rar matlab GUI实例.rar MATLAB GUI实现动态画图曲线的源程序代码.rar matlab.rar...
java语言实现求素数的原根的源代码 输入一个素数 求出他所有的原根 密码学相关 java语言实现求素数的原根的源代码 输入一个素数 求出他所有的原根 密码学相关
java代码-使用java解决输出1000以内最大的n个质数及其和。输出形式“质数1+质数2+...+质数n=的源代码 ——学习参考资料:仅用于个人学习使用!
java的10000以内的数的素数的求法,算法简单易懂
主要介绍了java使用筛选法求n以内的素数示例(java求素数),需要的朋友可以参考下
MATLAB设计源码28个MATLAB源程序代码文件合集: MATLAB DCT水印源程序代码.rar MATLAB GUI实现动态画图曲线的源程序代码.rar MATLAB中colorbar的设置 源程序代码.rar ...蒙特卡洛法求椭圆面积的MATLAB源程序代码.rar
一个简单而易懂的判断一个数是否为素数的java代码
这是一个用java编写的控制台程序,可以求一个数是不是质数,并且把这个数按递减顺序求,一直求到1,一次性的显示判断
MATLAB寻找素数的源程序代码.zip实际问题建模MATLAB源程序代码下载MATLAB寻找素数的源程序代码.zip实际问题建模MATLAB源程序代码下载MATLAB寻找素数的源程序代码.zip实际问题建模MATLAB源程序代码下载MATLAB寻找素数...
java 求质数实例程序 求质数 源代码 简单易懂