## Writing a function to find prime numbers

Asked by Daniel Kingsley

### Daniel Kingsley (view profile)

on 19 Aug 2015
Latest activity Commented on by Irfan Turk

### Irfan Turk (view profile)

on 22 Jul 2019
Accepted Answer by James Tursa

### James Tursa (view profile)

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

David Young

### David Young (view profile)

on 19 Aug 2015
Please format your code - it's not readable as you can see. (There's a "{} Code" button.)

### Products

Answer by James Tursa

### James Tursa (view profile)

on 19 Aug 2015
Edited by James Tursa

### James Tursa (view profile)

on 19 Aug 2015

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

### Daniel Kingsley (view profile)

on 19 Aug 2015
@James, Thank you. I am still getting an error for the number 3 as an input. Maybe I should use rem instead of mod?

Answer by Pranash Azrot

### Pranash Azrot (view profile)

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

### Daniel Kingsley (view profile)

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

Answer by Irfan Turk

### Irfan Turk (view profile)

on 21 Jul 2019
Edited by Irfan Turk

### Irfan Turk (view profile)

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

### John D'Errico (view profile)

on 21 Jul 2019
How many times will you post this poor code to find prime numbers? I see that you have resurrected several old, long dead questions, only to post the same novice code.
Walter Roberson

### Walter Roberson (view profile)

on 21 Jul 2019
It would make more sense to break after assigning 0 to C.
Irfan Turk

### Irfan Turk (view profile)

on 22 Jul 2019
Thank you Walter. That's a good way to make the code better...