Print Prime Numbers 1-100 in Pseudocode

  • Thread starter Thread starter NDiggity
  • Start date Start date
  • Tags Tags
    comp sci
AI Thread Summary
The discussion focuses on the challenge of writing pseudocode to print prime numbers between 1 and 100. The initial attempt struggles with the logic for determining if a number is prime, particularly with the handling of the variable isPrime, which can incorrectly toggle between true and false. Suggestions include starting the loop from 3 instead of 1 or 2 to simplify the code, and adjusting the inner loop to iterate only up to the square root of i for efficiency. Additionally, the logic for checking primality needs to be corrected to ensure that any number j that divides i results in isPrime being set to false, and a final else statement should be included for clarity. Overall, the key takeaway is the need for improved logic and structure in the pseudocode to accurately identify prime numbers.
NDiggity
Messages
53
Reaction score
0

Homework Statement


The problem is to find all the prime numbers between one and one-hundred and print them out in pseudocode.

Here is my attempt. The problem is that when it's false, isPrime will be false but when it tries to divide by the next number and it is true, it makes isPrime true. I'm not sure how to fix this. Help!

bool isPrime <-- true
int i
int j

for i <-- 1 to 100
for j <--2 to 10
if (i=1)
continue
if (i =2)
print i
continue
if (i = j)
continue
if (i % j != 0 AND i!=j)
isPrime= true
if (i % j = 0)
isPrime = false
if (isPrime = true)
print i
 
Physics news on Phys.org
Some comments, the big problem is last.

NDiggity said:
for i <-- 1 to 100
Why are you starting at 1, or even 2? You know 1 is not prime and 2 is prime, as you have these hardcoded as exceptional cases. Print that 2 is prime and start at 3. All that those exceptional cases do is add complexity to the program. A lot (an awful lot) of programming shops measure the "cyclomatic complexity" of code. A lot (not quite as many, but still a lot) of programming shops specifically ban the use of "continue".

for j <--2 to 10
Much better would be to end this loop at sqrt(i), or if that is not acceptable, at i-1. Doing either makes a lot more sense than ending at 10.

if (i % j != 0 AND i!=j)
isPrime= true
if (i % j = 0)
isPrime = false
This is the big problem. There are two problems here. First, any number j that divides some other number i means i is not prime. This logic does not test for primality! Another problem: You have a fall through case (i.e., there is no final else). Once again, many programming shops view this as a sign of sloppy programming. Even if a final else is not needed, it is better to put one in that explicitly does nothing. Doing so shows that the programmer has thought about all of the cases.

Bottom line: You really need to fix the primality testing logic. Fixing the loop bounds is a good idea as well.
 

Similar threads

Replies
1
Views
1K
Replies
11
Views
3K
Replies
15
Views
5K
Replies
7
Views
2K
Replies
10
Views
3K
Replies
5
Views
3K
Back
Top