0% found this document useful (0 votes)
13 views16 pages

MagicSquare1

maths, linear algebra, matrix

Uploaded by

k.s.jagan2005
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views16 pages

MagicSquare1

maths, linear algebra, matrix

Uploaded by

k.s.jagan2005
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 16

Learning the Art of Programming

Using 'If then else' structure

N=5; % N must be odd


A=zeros(N,N);
j=1+(N-1)/2 ; % fill centre cell in the first row
i=1; A(i,j)=1;

1
We need to advance to a new cell by moving diagonally upward

How do we do it ?.

Then we need to check whether

1) i < 0 or j > n or both. We need to change i and j to new location

If both are voilated, it is a spacial case . It happens when currenly filled cell is (1,n). Then

else if

else if

end

end

end

2) if i and j are in the admissible range ( 1 to n ) we need to check

whether (i,j) is already filled or not . If filled, change i and j.

3) fill (i,j) th cell with new value

2
clear all
% Fill in a odd magic squre from 1 to N^2
% In general numbers must form an Arithmetic %Progression

3
N=5; % N must be odd
A=zeros(N,N);
j=1+(N-1)/2 ; % fill centre cell in the first row
i=1; A(i,j)=1;
for K=2:N*N
i=i-1; j=j+1; % Advance towards right diagonal
% putback into the matrix if gone out
% We are using independent if statement
% First three 'if' can be in any order
if and(i<1, j==N+1) i=2; j=N; end
if and (j<=N , i<1) i=N; end
if and (i>0 , j>N) j=1; end

if A(i,j)~=0 i=i+2; j=j-1 ; end


A(i,j)=K;
end
A

A = 5×5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9

4
Create a Magic Square with your date of Birth.

5
Write a code for Generating Ramanujan's Magic square

% Magic square with my Date of birth


DD=10; MM=03; CC=19; YY=60;
A=[DD,MM,CC,YY; YY+1 CC-1 MM-3 DD+3; MM-2 DD+2 YY+2 CC-2];
A=[A; CC+1 YY-1 DD+1 MM-1]

A = 4×4
10 3 19 60
61 18 0 13
1 12 62 17
20 59 11 2

Columnsum=sum(A)

Columnsum = 1×4
92 92 92 92

rowsum =sum(A')

rowsum = 1×4
92 92 92 92

Diagsum=sum(diag(A))

Diagsum = 92

Antidiagsum=sum(diag(rot90(A)))

Antidiagsum = 92

sidewindowsumvertical=sum([A(2,1), A(3,1), A(2,4), A(3,4)])

sidewindowsumvertical = 92

sidewindowsumhoriz=sum([A(1,2), A(1,3), A(4,2), A(4,3)])

sidewindowsumhoriz = 92

cornerdiagsummain=sum([A(1,3), A(2,4), A(3,1), A(4,2)])

6
cornerdiagsummain = 92

cornerantidiagsum=sum([A(1,2), A(2,1), A(3,4), A(4,3)])

cornerantidiagsum = 92

submatrix1=sum([A(1,1), A(1,2), A(2,1), A(2,2)])

submatrix1 = 92

submatrix2=sum([A(1,3), A(1,4), A(2,3), A(2,4)])

submatrix2 = 92

submatrix3=sum([A(3,1), A(3,2), A(3,3), A(3,4)])

submatrix3 = 92

submatrix4=sum([A(3,3), A(3,4), A(4,3), A(4,4)])

submatrix4 = 92

submatrix5=sum([A(2,1), A(2,2), A(3,1), A(3,2)])

submatrix5 = 92

submatrix6=sum([A(2,3), A(2,4), A(3,3), A(3,4)])

submatrix6 = 92

Cornersum=sum([A(1,1), A(1,4), A(4,1), A(4,4)])

Cornersum = 92

Middlesquaresum=sum([A(2,2), A(2,3), A(3,2), A(3,3)])

Middlesquaresum = 92

Generic Magic Square of size 4


Steps

1) Create a 4x4 matrix with consective positive numbes as follows

7
% Any consecutive positive integer is okay
% Example. Generate integer numbers from 1 to 16
x=1:16;
A=reshape(x,4,4);
A=A';
temp=A(4,4);
A(4,4)=A(1,1);
A(1,1)=temp;
temp=A(2,2);
A(2,2)=A(3,3);
A(3,3)=temp;

temp=A(1,4);
A(1,4)=A(4,1);
A(4,1)=temp;

temp=A(2,3);
A(2,3)=A(3,2);
A(3,2)=temp;
A

A = 4×4
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

sum(A,1) % Column sum

8
ans = 1×4
34 34 34 34

sum(A,2) % Row sum

ans = 4×1
34
34
34
34

sum(diag(A)) % diag sum

ans = 34

sum(diag(rot90(A))) % anti diag sum

ans = 34

% Code Modification for odd n Magic Square

1) any Aprithmetic progression yn= a+k*d with a, d >0 will work

2) Create code for 'automated evaluation' for different n (odd), k and d

Checking Leap year

step

1) Let x be given year . Check if x is divisible by 400. If true x is leap year

2) elseif check whether x is divisible 100. If true , x is not a leap year

3) elseif check whether x is divisible 4. If true x is leap year

4) x is not a leap year.

year=2000:2005;
n=length(year);
for i=1:n
if mod(year(i),400)==0
X = sprintf('year %d %s',year(i), 'is a leap year');
disp(X)
elseif mod(year(i),100)==0
X = sprintf('year %d %s',year(i),'is not a leap year');
disp(X)
elseif mod(year(i),4)==0
X = sprintf('year %d %s',year(i),'is a leap year');
disp(X)
else X = sprintf('year %d %s',year(i),'is not a leap year');
disp(X)
end
end

9
year 2000 is a leap year
year 2001 is not a leap year
year 2002 is not a leap year
year 2003 is not a leap year
year 2004 is a leap year
year 2005 is not a leap year

Find all numbers from 1 to 100 that are divisible by 3 or 5 but not both

X=[];
for i=1:100
if ( or( mod(i,3)==0, mod(i,5)==0) && not(mod(i,15)==0))
X=[X i];
end
end
disp(X)

3 5 6 9 10 12 18 20 21 24 25 27 33 35 36 39 40 42 48

Find sum of all numbers from 1 to 100 that are divisible by 3 or 5 but not both.

sum1=0;
for i=1:100
if ( or( mod(i,3)==0, mod(i,5)==0) && not(mod(i,15)==0))
sum1=sum1+i;
end
end
disp(sum1)

2103

% another method
sum2=sum(3:3:100)+sum(5:5:100)-2*sum(15:15:100)

sum2 = 2103

Break inside For Loop

Add consecutive integer numbers between 1 to 100 till sum just exceeds 2550

x=2550;
sum=0;
for i=1:100
sum=sum+i;
if sum>x break; end
end
i, sum

i = 71

10
sum = 2556

Add consecutive odd numbers between 1 to 100 till sum just exceeds 1000

x=1000;
sum=0;
for i=1:2:100
sum=sum+i;
if sum>x break; end
end
i, sum

i = 63
sum = 1024

Using the prime numbers 2,3,5,7 in the range 1 to 10, find prime number from 11 to 100.

for n=11:100
if any(mod(n,[2 3 5 7])==0)
% do nothing
else
x=sprintf('%d is a prime',n);
disp(x)
end
end

11 is a prime
13 is a prime
17 is a prime
19 is a prime
23 is a prime
29 is a prime
31 is a prime
37 is a prime
41 is a prime
43 is a prime
47 is a prime
53 is a prime
59 is a prime
61 is a prime
67 is a prime
71 is a prime
73 is a prime
79 is a prime
83 is a prime
89 is a prime
97 is a prime

% yet another way


for n=11:100

11
if(mod(n,2)==0) ;
% do nothing
elseif (mod(n,3)==0) ;
% do nothing
elseif (mod(n,5)==0) ;
% do nothing
elseif (mod(n,7)==0);
% do nothing
else
x=sprintf('%d is a prime',n);
disp(x)
end

end

11 is a prime
13 is a prime
17 is a prime
19 is a prime
23 is a prime
29 is a prime
31 is a prime
37 is a prime
41 is a prime
43 is a prime
47 is a prime
53 is a prime
59 is a prime
61 is a prime
67 is a prime
71 is a prime
73 is a prime
79 is a prime
83 is a prime
89 is a prime
97 is a prime

Using the prime numbers 2,3,5,7 in the range 1 to 10, find prime number from 11 to 1000.

X= [2 3 5 7];
% we need to consider prime up to sqrt(1000) for division
u=ceil(sqrt(1000)); % u=32. 32x32=1024
for n=11:1000
if any(mod(n,X)==0)
% do nothing
else
x=sprintf('%d is a prime',n);
disp(x)
if (n<=u)
X=[X n]; % append the new prime to the list if <=32
end
end
end

12
11 is a prime
13 is a prime
17 is a prime
19 is a prime
23 is a prime
29 is a prime
31 is a prime
37 is a prime
41 is a prime
43 is a prime
47 is a prime
53 is a prime
59 is a prime
61 is a prime
67 is a prime
71 is a prime
73 is a prime
79 is a prime
83 is a prime
89 is a prime
97 is a prime
101 is a prime
103 is a prime
107 is a prime
109 is a prime
113 is a prime
127 is a prime
131 is a prime
137 is a prime
139 is a prime
149 is a prime
151 is a prime
157 is a prime
163 is a prime
167 is a prime
173 is a prime
179 is a prime
181 is a prime
191 is a prime
193 is a prime
197 is a prime
199 is a prime
211 is a prime
223 is a prime
227 is a prime
229 is a prime
233 is a prime
239 is a prime
241 is a prime
251 is a prime
257 is a prime
263 is a prime
269 is a prime
271 is a prime
277 is a prime
281 is a prime
283 is a prime
293 is a prime
307 is a prime
311 is a prime
313 is a prime
317 is a prime
331 is a prime
337 is a prime

13
347 is a prime
349 is a prime
353 is a prime
359 is a prime
367 is a prime
373 is a prime
379 is a prime
383 is a prime
389 is a prime
397 is a prime
401 is a prime
409 is a prime
419 is a prime
421 is a prime
431 is a prime
433 is a prime
439 is a prime
443 is a prime
449 is a prime
457 is a prime
461 is a prime
463 is a prime
467 is a prime
479 is a prime
487 is a prime
491 is a prime
499 is a prime
503 is a prime
509 is a prime
521 is a prime
523 is a prime
541 is a prime
547 is a prime
557 is a prime
563 is a prime
569 is a prime
571 is a prime
577 is a prime
587 is a prime
593 is a prime
599 is a prime
601 is a prime
607 is a prime
613 is a prime
617 is a prime
619 is a prime
631 is a prime
641 is a prime
643 is a prime
647 is a prime
653 is a prime
659 is a prime
661 is a prime
673 is a prime
677 is a prime
683 is a prime
691 is a prime
701 is a prime
709 is a prime
719 is a prime
727 is a prime
733 is a prime
739 is a prime
743 is a prime

14
751 is a prime
757 is a prime
761 is a prime
769 is a prime
773 is a prime
787 is a prime
797 is a prime
809 is a prime
811 is a prime
821 is a prime
823 is a prime
827 is a prime
829 is a prime
839 is a prime
853 is a prime
857 is a prime
859 is a prime
863 is a prime
877 is a prime
881 is a prime
883 is a prime
887 is a prime
907 is a prime
911 is a prime
919 is a prime
929 is a prime
937 is a prime
941 is a prime
947 is a prime
953 is a prime
967 is a prime
971 is a prime
977 is a prime
983 is a prime
991 is a prime
997 is a prime

Write a code to find out the answer.

Required answer is LCM of (3,4,10) which is 60

x=true;
n=10; % maximum value among the clock ringing interval time
while (x) % As long as x is true, loop
n=n+1;
if all(mod(n, [3 4 10])==0) x=false; end
end
X = sprintf('All the bell ring simultaneously at %d %s',n, 'th hour');
disp(X)

15
All the bell ring simultaneously at 60 th hour

Find the least integer number which when divided by 2 to 6, the remainder is 1 but eactly divisible 7.

LCM of (2,3,4,5,6) is 60. So the required number is greater than 60

The required number is k*60+1 that is divisible by 7. k is the least appropriate integer

x=true;
n=60;
div=[2,3,4,5,6];
while (x)
n=n+1;
if (all(mod(n,div)==1) && mod(n,7)==0) x=false;
end
end
n

n = 301

% another method
x=true;
k=1;
while (x)
n1=k*60+1;
k=k+1;
if (all(mod(n1,div)==1) && mod(n1,7)==0) x=false; end
end
n1

n1 = 301

16

You might also like