В дополнение к ответу @ EuanSmith.Вы также можете использовать встроенную функцию Matlab, чтобы определить, является ли число простым или нет.
Следующий код даст вам желаемый результат:
A = [1,2;3,4];
A(A==1) = 0.5; %replace 1 number with 0.5
A(isprime(A)) = 1; %replace prime number with 1
A(~ismember(A,[0.5,1])) = 0; %replace composite number with 0
Я сделалпредположение, что матрица содержит только целое число.
Если вы хотите только изучить, вы также можете сохранить цикл for с некоторым улучшением, поскольку функция mod
может принимать более 1 делителя в качестве входных данных:
function A = modifikuj(A)
[n,m] = size(A);
for i = 1:n
for j = 1:m
k = A(i,j);
if (k == 1)
A(i,j) = 0.5;
else
if all(mod(k,2:k-1)) %check each modulo at the same time.
A(i,j)=1;
else
A(i,j)=0;
end
end
end
end
И вы все еще можете улучшить обнаружение простых чисел:
- 2 - это единственное четное число для проверки.
- число больше, чем A (i, j) / 2бесполезны
, поэтому вместо all(mod(k,2:k-1))
вы можете использовать all(mod(k,[2,3:2:k/2]))
Также обратите внимание, что функция isprime
является гораздо более эффективным тестом простоты, поскольку она использует вероятностный Миллер-Rabin алгоритм.