+素数也叫质数。素数是指在大于1的自然数中,除了1和它本身外,不能被其它自然数整除的数。
常用的求素数的方法有两种
1. 试商判别法 2. 筛选法
试商判别法 :试商法判别奇数 i 是不是素数(只有唯一素数2,不做试商判别),用数字 j (取 3,4,... ,直到sqrt(i))去试商。若存在某个 j 能整除 i ,说明 i 能被 1 与 i 本身以外的整数 j 整除, i 不是素数。
注:理论上,如果 i 存在一个大于sqrt(i)且小于 i 的因数,则必存在一个与之对应的小于sqrt(i) 且大于 1 的因数,因此从判别功能来说,取到sqrt(i)已足够了。
筛选法求素数:为了方便实施“划去”操作,应设置数组,每一个数组元素对应一个待判别的奇数,并附初值 0 。如果该奇数为P的倍数则应划去,对应元素加一个划去标记,通常给该元素赋值-1. 最后,打印元素值不是-1(既没有划去)的元素对应的奇数即所求素数。在实际应用筛选法的过程中,P通常不限于取不超过sqrt(i)的素数,而是适当放宽取不超过sqrt(i)的奇数(从3开始)。这样做尽管多了一些重复划去的操作,但程序实现比较简单。
两者比较:试商法较为直观,设计容易实现。筛选法在较大整数的判别中,效率更高一些,但设计上较难把握。
例题:使用MATLAB软件编程求1到100之间的素数,并对所有素数求和。(试商判别法)
0到100之间的素数 | ||||
2 | 3 | 5 | 7 | 11 |
13 | 17 | 19 | 23 | 29 |
31 | 37 | 41 | 43 | 47 |
53 | 59 | 61 | 67 | 71 |
73 | 79 | 83 | 89 | 97 |
MATLAB程序源代码
% CSDN账号:MATLAB码农
clc;
clear all;
sum=5; %求0~100素数之和
ss=0; %用来标定是否是素数,0表示不是
prime=[2 3]; %用来存放素数,2,3为素数,先放置在prime矩阵中
for i=4:100
for j=2:fix(sqrt(i))
if mod(i,j)==0
ss=0; %能被整除,说明i不是素数,用ss=0来表示
break; %能被整除,跳出内循环
else
ss=1;
end
end
if ss==1 %是素数,保存至prime矩阵,并求和
prime=[prime,i];
sum=sum+i;
end
end
disp('0到100内的素数为:');
prime
disp('0到100内素数的和为:');
sum
MATLAB程序运行结果