Check if element in array are square of each other

8 visualizzazioni (ultimi 30 giorni)
Hello,
I have a problem where I have to find possible squares in an array. For example [7 5 49] or [49 5 7] is true since 7 squared is 49, but [11 13 25] should return false.
Is there a way to do it better than a nested loop?
Thank you!
function y = isItSquared(x)
y = false;
for i = 1:length(x)
for j = i+1:length(x)
if x(i)^2 == x(j) || x(i) == x(j)^2
y = true
break
end
end
end

Risposta accettata

Mark Sherstan
Mark Sherstan il 22 Mar 2019
You can get rid of one of the for loops:
function y = isItSquared(x)
y = false;
xSquare = x.^2;
for ii = 1:length(x)
if (sum(x(ii) == xSquare) ~= 0)
y = true;
return
end
end
  4 Commenti
am
am il 22 Mar 2019
So if xSquare has no index, it means that the whole array is checked?
sum(x(ii) == xSquare) ~= 0
Mark Sherstan
Mark Sherstan il 22 Mar 2019
Correct, it is a boolean check returning an array of 1's or 0's.

Accedi per commentare.

Più risposte (4)

madhan ravi
madhan ravi il 22 Mar 2019
nnz(V.^2==V.')>=1 % where V your vector, result 0 means false, 1 means true
  5 Commenti
madhan ravi
madhan ravi il 22 Mar 2019
Modificato: madhan ravi il 22 Mar 2019
@eq means equal ,see https://in.mathworks.com/help/matlab/ref/bsxfun.html for further explanation.
https://in.mathworks.com/help/matlab/ref/nnz.html - nnz() gives you the total number of non-zero elements.
>= means if you have one or more then set it to true.
So what happens is each element of the vector is compared with the square of each element , so if atleast a single match is found then the answer returned is 1 meaning true.
am
am il 22 Mar 2019
I think it was a fantastic answer as well, thank you!

Accedi per commentare.


Steven Lord
Steven Lord il 22 Mar 2019
I would probably do this using some subset of the ismember, any, sum, all, and/or isequal functions. Read through the help text and see if you can think of a way to use some of those functions to accomplish that task.

KSSV
KSSV il 22 Mar 2019
a = [7 5 49] ;
b = [49 5 7] ;
idx = a.^2==b
In idx if 1 , true, if zero false.

Agam Sharma
Agam Sharma il 8 Giu 2022
function b = isItSquared(a)
b=false;
c=a.^2; %creating another array containing respective squares in 'a'
for i=1:length(c)
if(ismember(c(i),a)) %check if square is present in a itself
b=true;
end
end
end

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by