Maple MAPLE - Simple procedure to test primality

AI Thread Summary
The discussion focuses on creating a simple primality test procedure in Maple using the mod function. The user is attempting to implement a custom ISPRIME function but is encountering issues with the looping logic and output. It is suggested that the function should return true or false instead of printing the results directly. A solution involves using a "FoundDivisor" variable to track whether a divisor is found and breaking the loop upon discovery. The user indicates they have resolved the issue independently after receiving guidance.
dkotschessaa
Messages
1,063
Reaction score
763
This is technically a "homework" type question so I just need a bit of help.

I'm just learning maple and writing a very basic procedure. I'm testing primality exhaustively by using the mod function. (Yes, maple has a built in procedure for this, but this is just an exercise).

ISPRIME := proc (n)
local i;
local s;
if n < 2 then return false end if;
if n = 2 then return true end if;
for i from 2 to n do if n mod i = 0 then print (false) else print(true);
end do;
end proc;

I kind of know why this isn't working but I don't know how to fix it. If I find an i such that n mod i is zero, then the number n is not prime - so that's all. Print (false) in that case.

If it is not the case that n mod i = 0 then I want to continue testing all the different i's up to n. (really n-1) if I don't get anything, print (true). But it seems to not be looping the procedure for all the possible i's.

Help/hints appreciated. Thanks.

-Dave K
 
Physics news on Phys.org
Since this isn't a homework problem, I can just give you the answer.

I would have your "IsPrime" function return true or false and have the calling program do the printing.

You should set a "FoundDivisor" variable to false. Then inside the loop, if the Mod function returns zero, set FoundDivisor to true and "break" from the loop. If you drop through the loop without finding a divisor, "FoundDivisor" will still be false. So then just return not FoundDivisor.
 
I figured something else out, but thanks for your reply!
 
Back
Top