关于筛选法求素数的算法我就不介绍了,大家可以点
这里查看相关资料查看相关资料,这里只是贴下粗糙的代码。
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;
分享到:
相关推荐
埃拉托斯特尼筛法是一种经典的求素数的方法,通过逐步筛选掉非素数来得到所有小于给定数的素数。在MATLAB中,可以创建一个全为1的布尔数组,然后从2开始,每次找到一个未被筛掉的数(即当前的素数),就将其倍数...
以下是一个简单的C++代码示例,展示了如何应用筛选法求素数: ```cpp #include #include void sieveOfEratosthenes(int n) { std::vector<bool> isPrime(n + 1, true); isPrime[0] = isPrime[1] = false; // 0...
MATLAB实现不同插值方法的GUI界面设计 源程序代码.rar MATLAB实现偏微分方程的差分计算 源程序代码.rar MATLAB实现单摆在外力矩作用下的动画 源程序代码.rar MATLAB实现图像中值 均值 维纳滤波 源程序代码.rar ...
在易语言中实现Eratosthenes筛选法求质数的源码可能如下: ```易语言 .整数变量 n, i, j .布尔型数组 质数表 (n) .输入 "请输入要找的质数上限:", n 质数表.全部赋值 (.真) i = 2 .循环 (n) .如果 质数表[i] j...
2013全国大学生数学建模B题matlab代码.rar 802.11a OFDM MATLAB仿真代码!(推荐).rar MATLAB DCT水印源程序代码.rar MATLAB GUI 实例.rar matlab GUI实例.rar MATLAB GUI实现动态画图曲线的源程序代码.rar matlab.rar...
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光通过三...
筛选法求素数,在大范围内求素数比其他方法高效很多。
车牌识别 拉格朗日插值 滤波器 蒙特卡洛法求椭圆面积等建模MATLAB源程序代码(28个): MATLAB GUI实现动态画图曲线的源程序代码 MATLAB中colorbar的设置 源程序代码 MATLAB中的基本语法和语句示例代码 MATLAB使用...
java代码-使用java解决输出1000以内最大的n个质数及其和。输出形式“质数1+质数2+...+质数n=的源代码 ——学习参考资料:仅用于个人学习使用!
MATLAB实现求梅森素数(完整代码) 2.代码说明:注释清晰,参数和变量说明清晰,方便更改、方便初学者使用,模块化编程,方便替换目标函数。运行环境Windows7及以上操作系统,MATLAB2014a及以上版本。 3.适用专业:...
总之,Java中的筛选法求素数是一种实用的算法,它结合了数学原理和编程技巧,能够有效地找出一定范围内的所有素数。通过理解并实践这段代码,开发者可以深入理解素数筛选法的实现细节,并将其应用到更广泛的编程场景...
MATLAB设计源码28个MATLAB源程序代码文件合集: MATLAB DCT水印源程序代码.rar MATLAB GUI实现动态画图曲线的源程序代码.rar MATLAB中colorbar的设置 源程序代码.rar ...蒙特卡洛法求椭圆面积的MATLAB源程序代码.rar
java的10000以内的数的素数的求法,算法简单易懂
以下是一个基础的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语言中实现求素数的原根,我们需要以下步骤: 1. **素数判断**:首先需要一个函数来判断输入的数是否为素数。可以采用试除法,从2到这个数的平方根,如果发现有任何能整除的数,那么这个数不是素数。如果没有...