`

筛选法求素数Java代码和matlab代码实现

阅读更多
关于筛选法求素数的算法我就不介绍了,大家可以点这里查看相关资料查看相关资料,这里只是贴下粗糙的代码。

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;

1
0
分享到:
评论
2 楼 lwjlaser 2011-12-04  
貌似掉线 写道
楼主是刚从C转JAVA的?

不是,只是习惯这样的写花括号。
1 楼 貌似掉线 2011-12-03  
楼主是刚从C转JAVA的?

相关推荐

    matlab 求素数 (四种方法)

    埃拉托斯特尼筛法是一种经典的求素数的方法,通过逐步筛选掉非素数来得到所有小于给定数的素数。在MATLAB中,可以创建一个全为1的布尔数组,然后从2开始,每次找到一个未被筛掉的数(即当前的素数),就将其倍数...

    筛选法求素数

    以下是一个简单的C++代码示例,展示了如何应用筛选法求素数: ```cpp #include #include void sieveOfEratosthenes(int n) { std::vector&lt;bool&gt; isPrime(n + 1, true); isPrime[0] = isPrime[1] = false; // 0...

    MATLAB源程序代码MATLAB图像处理信号处理设计源码52个合集.zip

    MATLAB实现不同插值方法的GUI界面设计 源程序代码.rar MATLAB实现偏微分方程的差分计算 源程序代码.rar MATLAB实现单摆在外力矩作用下的动画 源程序代码.rar MATLAB实现图像中值 均值 维纳滤波 源程序代码.rar ...

    Eratosthenes筛选法求质数.rar

    在易语言中实现Eratosthenes筛选法求质数的源码可能如下: ```易语言 .整数变量 n, i, j .布尔型数组 质数表 (n) .输入 "请输入要找的质数上限:", n 质数表.全部赋值 (.真) i = 2 .循环 (n) .如果 质数表[i] j...

    MATLAB源代码MATLAB源码大集合220MB上千个源码文件.zip

    2013全国大学生数学建模B题matlab代码.rar 802.11a OFDM MATLAB仿真代码!(推荐).rar MATLAB DCT水印源程序代码.rar MATLAB GUI 实例.rar matlab GUI实例.rar MATLAB GUI实现动态画图曲线的源程序代码.rar matlab.rar...

    28个实际问题建模MATLAB源程序代码.zip

    11.MATLAB实现不同插值方法的GUI界面设计 源程序代码 12.MATLAB实现灰度预测模型的源代码 13.MATLAB实现偏微分方程的差分计算 源程序代码 14.MATLAB实现图像去噪 滤波 锐化 边缘检测 15.MATLAB实现线性拟合和相关...

    MATLAB编程源代码文件大全集合【约1000+】

    2013全国大学生数学建模B题matlab代码.rar 802.11a OFDM MATLAB仿真代码!(推荐).rar MATLAB DCT水印源程序代码.rar MATLAB GUI 实例.rar matlab GUI实例.rar MATLAB GUI实现动态画图曲线的源程序代码.rar matlab.rar...

    matlab 4秒快速计算50000000以内的素数

    Matlab课程老师提出的计算素数比赛,在30秒内看谁能用机房里的电脑计算出最多的素数。兴趣使然,自己结合基本的素数定理和筛选法,成功编写这个小程序。目的无他,贴出以供交流和共同进步。

    27个Matlab代码源程序合集.zip

    27个Matlab代码源程序合集: MATLAB DCT水印源程序代码.rar MATLAB GUI实现动态画图曲线的源程序代码.rar MATLAB中的基本语法和语句示例代码.rar MATLAB使用欧拉Euler法求解微分方程组 源程序代码.rar MATLAB光通过三...

    j筛选法求素数

    筛选法求素数,在大范围内求素数比其他方法高效很多。

    车牌识别 拉格朗日插值 滤波器 蒙特卡洛法求椭圆面积等建模MATLAB源程序代码(28个).zip

    车牌识别 拉格朗日插值 滤波器 蒙特卡洛法求椭圆面积等建模MATLAB源程序代码(28个): MATLAB GUI实现动态画图曲线的源程序代码 MATLAB中colorbar的设置 源程序代码 MATLAB中的基本语法和语句示例代码 MATLAB使用...

    java代码-使用java解决输出1000以内最大的n个质数及其和。输出形式“质数1+质数2+...+质数n=的源代码

    java代码-使用java解决输出1000以内最大的n个质数及其和。输出形式“质数1+质数2+...+质数n=的源代码 ——学习参考资料:仅用于个人学习使用!

    MATLAB实现求梅森素数(完整代码)

    MATLAB实现求梅森素数(完整代码) 2.代码说明:注释清晰,参数和变量说明清晰,方便更改、方便初学者使用,模块化编程,方便替换目标函数。运行环境Windows7及以上操作系统,MATLAB2014a及以上版本。 3.适用专业:...

    java使用筛选法求n以内的素数示例(java求素数)

    总之,Java中的筛选法求素数是一种实用的算法,它结合了数学原理和编程技巧,能够有效地找出一定范围内的所有素数。通过理解并实践这段代码,开发者可以深入理解素数筛选法的实现细节,并将其应用到更广泛的编程场景...

    MATLAB设计源码28个MATLAB源程序代码文件合集.zip

    MATLAB设计源码28个MATLAB源程序代码文件合集: MATLAB DCT水印源程序代码.rar MATLAB GUI实现动态画图曲线的源程序代码.rar MATLAB中colorbar的设置 源程序代码.rar ...蒙特卡洛法求椭圆面积的MATLAB源程序代码.rar

    求素数的Java表示

    java的10000以内的数的素数的求法,算法简单易懂

    MATLAB源程序代码分享:MATLAB查找素数的源程序代码

    以下是一个基础的MATLAB代码示例: ```matlab function isPrime = checkPrime(n) if n == 2 || n == 3 isPrime = true; elseif mod(n, 2) == 0 || mod(n, 3) == 0 isPrime = false; else i = 5; w = 2; ...

    java语言实现求素数的原根

    在Java语言中实现求素数的原根,我们需要以下步骤: 1. **素数判断**:首先需要一个函数来判断输入的数是否为素数。可以采用试除法,从2到这个数的平方根,如果发现有任何能整除的数,那么这个数不是素数。如果没有...

Global site tag (gtag.js) - Google Analytics