写法1:
for i = 101:200
isPrime = true; % 假设 i 是素数
for j = 2:floor(sqrt(i)) %floor是一个向下取整函数
if rem(i, j) == 0
isPrime = false; % 如果存在能够整除 i 的因子,则 i 不是素数
break; %isPrime为假,则跳出最内层循环。i+1,继续执行外层循环。
end
end
if isPrime
fprintf('%d是素数\n', i);
end
end
%这个假设所有的数都是素数(isPrime),通过挑出isPrime=0的数,剩下的全是素数。
写法2:
clear all;
clc;
Num = 101:200;
for i=1:size(Num,2) %size是获取数组长度,2表示获取列数,因为Num数组是一整行
for j=2:ceil(sqrt(Num(i))) %ceil表示向上取整,和floor相对
if rem(Num(i),j)==0
flag(i)=0; %flag是一个逻辑数组,通过给Num数组中每个元素赋0或1,标记该元素是否为素数
break;
else
flag(i)=1;
end
end
end
Num_prime_numbers=size(find(flag==1),2); %创建数组Num_prime_numbers获取素数数组长度
prime_number=Num(find(flag==1)); %创建prime_number数组存储素数
fprintf('101~200间的素数有:%d\n',prime_number);
fprintf('101~200间的素数有%d个',Num_prime_numbers);
%这个程序通过对每一个数判断并进行逻辑赋值,区分出素数与非素数。
find
函数是 MATLAB 中用于查找数组中满足某个条件的元素的函数。它的基本语法如下:
idx = find(A)
idx = find(A, k)
[idx1, idx2, ..., idxN] = find(A)
其中,A
是一个数组,idx
是一个向量,包含了 A
中所有满足条件的元素的线性索引。k
是一个整数,表示最多查找 k
个满足条件的元素。
如果需要获取每个满足条件的元素在 A
中的下标,可以使用多个输出参数,如 [idx1, idx2, ..., idxN] = find(A)
。
find
函数的常见用途包括:
- 查找非零元素:
find(A ~= 0)
返回A
中所有非零元素的索引。 - 查找满足条件的元素:
find(A > 5)
返回A
中所有大于5的元素的索引。 - 查找特定值的元素:
find(A == 3)
返回A
中所有值为3的元素的索引。 - 查找满足多个条件的元素:
find(A > 5 & A < 10)
返回A
中所有大于5且小于10的元素的索引。
(1)idx = find(A)
:返回矩阵 A
中所有非零元素的线性索引。
A = [0 1 0; 2 0 3; 0 4 5];
idx = find(A);
disp(idx);
输出:
2 4 6 8 9
在这个示例中,矩阵 A
中的非零元素是 1、2、3、4 和 5,对应的线性索引分别是 2、4、6、8和 9。
(2)idx = find(A, k)
:返回矩阵 A
中前 k
个非零元素的线性索引。
A = [0 1 0; 2 0 3; 0 4 5];
idx = find(A, 3);
disp(idx);
输出:
2 4 6
在这个示例中,矩阵 A
中的前 3 个非零元素是 1、2 和 3,对应的线性索引分别是 2、4 和 6。
(3)[idx1, idx2, ..., idxN] = find(A)
:返回矩阵 A
中所有非零元素的行索引和列索引。
A = [0 1 0; 2 0 3; 0 4 5];
[idxRow, idxCol] = find(A);
disp(idxRow);
disp(idxCol);
输出:
2 1 3 3 2
2 1 3 2 3
在这个示例中,矩阵 A
中的非零元素是 1、2、3、4 和 5,对应的行索引和列索引分别是 (2, 2)、(1, 1)、(3, 2)、(3, 3) 和 (2, 3)。