Asked by Daniel Kingsley
on 19 Aug 2015

This is homework. I already turned it in. I just don't know why this function doesn't work. I just want to learn what I missed. Thanks so much. This is the problem:

Write a function myprime that takes n, a positive integer,as an input and returns true if n is prime or returns false otherwise. Do not use the isprime or primes or factor built-‐in functions.

Here is my code:

function result = myprime(n)

%%initially set output flag to true

result = true;

%%iterate over all positive integers 2,3,...,n-1

%%if n is not divisible by any of these factors....it is prime

if (n == 1)

result = 'false';

elseif (n == 2)

result = 'true';

else

for i=2:n-1,

if (mod(n,i)==0)

result = 'false';

end

end

end

%%return "true" or "false" instead of 1 or 0

if (result)

result = 'true';

else

result = 'false';

end

Answer by James Tursa
on 19 Aug 2015

Edited by James Tursa
on 19 Aug 2015

Accepted Answer

The basic problem is that you are mixing character variables (with the single quotes ' ') with logical variables (without single quotes). E.g.,

result = true; <-- LOGICAL

%%iterate over all positive integers 2,3,...,n-1

%%if n is not divisible by any of these factors....it is prime

if (n == 1)

result = 'false'; <-- CHARACTER

elseif (n == 2)

result = 'true'; <-- CHARACTER

else

for i=2:n-1,

if (mod(n,i)==0)

result = 'false'; <-- CHARACTER

end

end

end

%%return "true" or "false" instead of 1 or 0

if (result) <-- Intent of test is that variable is LOGICAL

result = 'true';

else

result = 'false';

end

So stick to one or the other. E.g., to use logical variables in the first part of your code:

if (n == 1)

result = false;

elseif (n == 2)

result = true;

else

for i=2:n-1,

if (mod(n,i)==0)

result = false;

end

end

end

Daniel Kingsley
on 19 Aug 2015

Sign in to comment.

Answer by Pranash Azrot
on 19 Aug 2015

%%Yaar meh edah kitaah see. meerah answer teek see. menu 100% meliah see. try karrey.

function x = myprime(n)

if (rem(n,2)~=0 || n==2)

k = fix(n/2);

else

x = false;

return;

end

for i = 1:k

w(i) = rem(n,i);

end

t=w(w==0);

[m n] = size(t);

if n<=1

x = true;

else

x = false;

return;

end

Daniel Kingsley
on 20 Aug 2015

@Pranash, I don't understand the comments. I thank you for your help.

Sign in to comment.

Answer by Irfan Turk
on 21 Jul 2019

Edited by Irfan Turk
on 21 Jul 2019

You can find all prime numbers upto a certain number with the following code

%This code find all prime numbers

%upto the entered number

clear all;

N=input('Prime Numbers until:');

if N<2

return;

elseif N==2

disp(2);

return;

end

Pr(1)=2;Pr(2)=3;Count=3;

for i=4:N

C=Check(i);

if C==1

Pr(Count)=i;

Count = Count +1;

end

end

disp(Pr);

function C=Check(i)

C=1;

for k=2:(ceil(sqrt(i)))

if mod(i,k)==0

C=0;

end

end

end

John D'Errico
on 21 Jul 2019

Walter Roberson
on 21 Jul 2019

It would make more sense to break after assigning 0 to C.

Irfan Turk
on 22 Jul 2019

Thank you Walter. That's a good way to make the code better...

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 1 Comment

## David Young (view profile)

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/234702-writing-a-function-to-find-prime-numbers#comment_305280

Sign in to comment.