how to check for a perfect square in a Matrix

10 views (last 30 days)
i have a problem in which i have to return a value of true if any element of the matrix is a pefect square
for example
A = [ 2,4,7 ; 8,7,3 ]
b is true
otherwise
b is false

Answers (4)

KSSV
KSSV on 9 Oct 2020
A = [ 2,4,7 ; 8,7,3 ];
b = (mod(sqrt(A), 1) == 0)
A(b)
  5 Comments
Image Analyst
Image Analyst on 17 Sep 2022
@Dawud Adam Rabiu if the number is a perfect square then the square root of it will be an integer, so that's what the mod checks for. If it's not a perfect square, there will be a fractional part so the mode of the number with 1 will be that fractional part, not 0. Only numbers with mod(sqrt(n))==0 will be perfect squares.
@Pallavi Chaudhary it seems to work fine if you use capital A:
A = [20:30];
b = (mod(sqrt(A), 1) == 0)
b = 1×11 logical array
0 0 0 0 0 1 0 0 0 0 0
A(b)
ans = 25
It correctly identifies 25 as the only perfect square in that vector (it's 5 squared). I'm not sure why you said it didn't work, but perhaps you used lower case "a" like you did. MATLAB is case sensitive so a is not the same as A.
Nick Austinos
Nick Austinos on 22 Sep 2022
The idea was to find if a matrix cotains two or more numbers for which num_x=(num_y)^2. or vice versa this code (mod(sqrt(A), 1) == 0) works perfectly for A = [ 2,4,7 ; 8,7,3 ] but it doesnt work for A=20:30; For that case the suggested solution below can be used, though it uses more memory.
for ii=1:length(a)
x(ii)=nnz(a==a(ii)^2);
if nnz(x)>0
b=true;
else
b=false;
end
end

Sign in to comment.


Ameer Hamza
Ameer Hamza on 8 Oct 2020
Use sqrt() and floor() functions to see which elements are perfect squares. Then use any(__, 'all') function to check if any element is a perfect square.

Ahmed Thawhid Sabit
Ahmed Thawhid Sabit on 15 Sep 2022
function b = isItSquared(a)
if a(1)^2 == a(end)
b = true;
else
b=false;
end
end
this solution has some drawnbacks... i couldnt find anysolution
  2 Comments
John D'Errico
John D'Errico on 17 Sep 2022
Note this code is not in fact a solution. Not even close. It compares only the square of the first element, compared then for some reason to the final element in the matrix.
Had you wanteed to use a loop, that would be possible, but this attempt is not close to that.
Ahmed Thawhid Sabit
Ahmed Thawhid Sabit on 18 Sep 2022
yes iu got the solution.. i just didn't understand the preoblem well

Sign in to comment.


aimane nedjima
aimane nedjima on 31 Oct 2022
Edited: aimane nedjima on 31 Oct 2022
function b = isItSquared(a)
M = size(a,1);
N = size(a,2);
b = false ;
for p=1:M
for i=1:N
% to compare one element with other in the same colomn
for j=1:N
if (a(p,i))^2 == a(p,j)
b = true ;
break % if we get one we stop
end
end
end
end

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!